jeudi 5 avril 2018

Mysql: Syntax error with if-else style functions

I am doing an academic project right now and there are functions required.

Here are the functions I created.

I tried to run those codes but result shows ERROR 1064-42000(syntax error), I don't know where is the problem.

DELIMITER //

DROP FUNCTION IF EXISTS code_STID;

CREATE FUNCTION code_STID(STID VARCHAR(25))

RETURNS VARCHAR(15)

BEGIN DECLARE newCode VARCHAR(25);

DECLARE codeNumber INT;

SET newCode = STID;

SET codeNumber = SUBSTRING(newCode,1,length(newCode)-1);

IF codeNumber < 100

    SET newCode = 'Z'+codeNumber;

ELSE IF newCode = STID;

    END IF;

    RETURN newCode;

END //

DELIMITER ;

DROP FUNCTION IF EXISTS code_Rank;

DELIMITER //

CREATE FUNCTION code_Rank(RANK VARCHAR(8))

RETURNS VARCHAR(2)

BEGIN

DECLARE Rank_Value VARCHAR(8);

IF RANK = 'LT';

    THEN SET Rank_Value = 'O1';

ELSE IF RANK = 'CAPT'

    THEN SET Rank_Value= 'O2';

ELSE IF RANK = 'CMDR'

    THEN SET Rank_Value = 'O3';

ELSE IF RANK ='TRPR'

    THEN SET Rank_Value = 'E1';

ELSE IF RANK = 'SP'

    THEN SET Rank_Value = 'E2';

ELSE IF RANK = 'CPL'

    THEN SET Rank_Value = 'E3';

ELSE IF RANK = 'SGT'

    THEN SET Rank_Value = 'E4';

ELSE IF RANK = 'MSGT'

    THEN SET Rank_Value = 'E5'



END IF;

        RETURN Rank_Value ; 

END //

DELIMITER ;

DROP FUNCTION IF EXISTS code_Gender;

DELIMITER //

CREATE FUNCTION code_Gender(GENDER VARCHAR(25))

RETURNS VARCHAR(1)

BEGIN

DECLARE GENDER_CODE VARCHAR(2);

IF GENDER = 'MALE'

    THEN SET GENDER_CODE='M';

ELSEIF GENDER = 'FEMALE'

    THEN SET GENDER_CODE = 'F';

    END IF;

    RETURN GENDER_CODE;


    END//

DELIMITER ;


DROP FUNCTION IF EXISTS code_Height;

DELIMITER //

CREATE FUNCTION code_Height(height INT,Weight INT, STID VARCHAR(25))

RETURNS INT

BEGIN

    DECLARE height_code INT;

    DECLARE first_Digit_ID INT;

    SET first_Digit_ID = CONVERT(SUBSTRING(STID,3,1));

    SET height_code = height*3 + (Weight *first_Digit_ID)+Weight ; 


    RETURN height_code;

    END//

    DELIMITER ;


    SELECT code_Height(410,250,'ST523') AS 'RESULT';

DROP FUNCTION IF EXISTS code_DC;

DELIMITER //

CREATE FUNCTION code_DC(DutyCategory VARCHAR(25))

RETURNS VARCHAR(1)

BEGIN

DECLARE CDC_CODE VARCHAR(2);

IF DutyCategory = 'Active'

    THEN SET CDC_CODE = 'A';

ELSEIF 

    THEN SET CDC_CODE ='R';

    RETURN CDC_CODE;

    END IF;

    END//

    DELIMITER ;

SELECT code_DC('Active') AS 'Result';

DROP FUNCTION IF EXISTS code_DS;

DELIMITER //

CREATE FUNCTION code_DS(DutyStatus varchar(25))

RETURNS VARCHAR(1)

BEGIN

DECLARE status_Code VARCHAR(2);

IF DutyStatus = 'Full Duty'

THEN SET status_Code = 'X';

ELSE 

SET status_Code ='Y';

END IF;

RETURN status_Code;

END //

DELIMITER ;

DROP FUNCTION IF EXISTS code_Role;

DELIMITER //

CREATE FUNCTION code_Role(Role VARCHAR(25))

RETURNS VARCHAR(10)

BEGIN

DECLARE role_value VARCHAR(5);

IF Role = 'Trooper'OR Role = 'Demolitions' OR Role = 'Assault'

THEN SET role_value = 'INF';

ELSE IF Role = 'Communications' OR Role = 'Medical' 

THEN SET role_value = 'SPT'

ELSE IF role = 'Reconnanissance'

THEN SET role_value = 'SPECOPS'

RETURN role_value;

END IF;

RETURN role_value;

SELECT role_value AS 'result';

END //

DELIMITER ;

Aucun commentaire:

Enregistrer un commentaire