2015-02-24 73 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