2015-02-24 35 views
0

以下函数定义不会给出任何错误,但它也不会按预期工作。谁能帮忙? 据应该返回的文字缩写之一提供一个int时:如何在SQL函数定义中包含CASE语句

CREATE FUNCTION foo(a int) 
RETURNS character 
LANGUAGE SQL 
AS $$ 
    SELECT CASE C.INSURANCETYPE 
    WHEN 0 THEN 'MB' --MEDICARE 
    WHEN 1 THEN 'MC' --MEDICAID 
    WHEN 2 THEN 'OF' --OTHER FED 
    WHEN 3 THEN 'CH' --CHAMPVA 
    WHEN 4 THEN 'CI' --GROUP 
    WHEN 5 THEN 'OF' --OTHER FED 
    WHEN 6 THEN 'CI' --OTHER GROUP 
    END 
    FROM C 
$$; 

SELECT foo(0); 

...没有返回

+1

是什么使得它*不*“按预期工作”?当查询在函数之外运行时会发生什么?我期望同样的结果..并且可能有一个ELSE缺失。 – user2864740 2015-02-24 21:21:57

+0

尝试为select语句设置一个变量并做一个返回(变量名) – logixologist 2015-02-24 21:42:33

回答

0
`CREATE or REPLACE FUNCTION NUM_TO_INSURANCE(NUM int) RETURNS varchar AS $body$ 
declare REL varchar; 
begin 
SELECT 
    CASE NUM --block_1 
    WHEN 0 THEN 'MB' --MEDICARE 
    WHEN 1 THEN 'MC' --MEDICAID 
    WHEN 2 THEN 'OF' --OTHER FED 
    WHEN 3 THEN 'CH' --CHAMPVA 
    WHEN 4 THEN 'CI' --GROUP 
    WHEN 5 THEN 'OF' --OTHER FED 
    WHEN 6 THEN 'CI' --OTHER GROUP 
    END 
    INTO REL; 
RETURN REL; 
END; 
$body$ LANGUAGE plpgsql;` 
0

试试这个:

Declare @insuranceType as char 

SET @insuranceType = (SELECT CASE C.INSURANCETYPE 
    WHEN 0 THEN 'MB' --MEDICARE 
    WHEN 1 THEN 'MC' --MEDICAID 
    WHEN 2 THEN 'OF' --OTHER FED 
    WHEN 3 THEN 'CH' --CHAMPVA 
    WHEN 4 THEN 'CI' --GROUP 
    WHEN 5 THEN 'OF' --OTHER FED 
    WHEN 6 THEN 'CI' --OTHER GROUP 
    END 
    FROM C) 

RETURN @insuranceType 
+0

这里假定它的SQL Server,我总是记得返回一个值。 – logixologist 2015-02-24 21:46:52

+0

如何存储和使用此功能? – 2015-02-24 22:33:08

+0

我只是没有包含你的代码。所以用上面的替换你的SELECT语句。我从记忆中这样做,所以它们可能是一个语法问题。它看起来正确,虽然:) – logixologist 2015-02-25 02:27:42