cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

CASE statement inside a function

Former Member
0 Likes
4,516

Hi all, I'm trying to make a convenience function that will expose an integer field as a human readable string, but for some reason I can't seem to get the syntax correct. I have tried many different approaches, but none seem to work. I am sure it is something fairly simple, but for the life of me I just can't seem to make a CASE statement work inside a FUNCTION. From my research, this should work

CREATE TEMPORARY FUNCTION RoleType(typeId INT)
RETURNS CHAR(30)
BEGIN
    DECLARE RoleType CHAR(30)
    CASE typeId
            WHEN 0 THEN SET RoleType = 'Own'
            WHEN 1 THEN SET RoleType = 'Child'
        WHEN 2 THEN SET RoleType = 'Root'
        WHEN 3 THEN SET RoleType = 'Shortcut'
    -- etc...
    END
    return RoleType
END


I know I could store these values in a look-up table, but honestly I'd rather just call the function than have to inner join a table every time I wanted to look up the role type, besides, my inability to make this work has frustrated me enough that I won't be happy until I've figured out what I'm doing wrong.

thanks

View Entire Topic
thomas_duemesnil
Participant

It works this way.

CREATE TEMPORARY FUNCTION RoleType(typeId INT)
RETURNS CHAR(30)
BEGIN
    DECLARE @RoleType CHAR(30);
    CASE typeId
    WHEN 0 THEN 
        SET @RoleType = 'Own';
    WHEN 1 THEN 
        SET @RoleType = 'Child';
    WHEN 2 THEN 
        SET @RoleType = 'Root';
    WHEN 3 THEN 
        SET @RoleType = 'Shortcut';
    END;
    return @RoleType;
END


It seams that you can't declare a variable with the same name as the function. I did not realize this before. Thanks for letting me know ;-)

Thomas