开关盒的更好解决方案

时间:2019-10-18 12:16:13

标签: oracle execute-immediate

您好,我需要有关Oracle的Switch案例更好的解决方案的帮助。 所以我有一个功能

FUNCTION GETSTAT(i_json_stats clob)  
RETURN  CRESPONSE AS

BEGIN 

    IF JSON_GET_STAT IS NOT NULL THEN
    FOR i IN 1..JSON_GET_STAT.count LOOP
    V_FUNCTION := json_ext.get_string(json(JSON_GET_STAT.get(i)), 'CLE');
      O_RETURN_RESPONSE := new CRESPONSE;

THE FIRST / THE SECOND SOLUTION BELOW

    END LOOP;
    END IF;

我有两个解决方案,第一个是使用switch和case 但是我想动态调用该函数,如果不是,我必须设置50个大小写。

第一个解决方案:

    case V_FUNCTION   
    when 'COUVERTURE_MAGASIN' then  v_json_collect.put(V_FUNCTION,COUVERTURE_MAGASIN(i_json_stats));
    when 'COUVERTURE_VOLUMES' then v_json_collect.put(V_FUNCTION,COUVERTURE_VOLUMES(i_json_stats));
    end case;

第二个解决方案:但是我不知道如何将其插入到我的GETSTAT函数中

    execute immediate' begin v_json_collect.put(V_FUNCTION,'||V_FUNCTION||'(i_json_stats)); end';

感谢帮助

1 个答案:

答案 0 :(得分:0)

您可以在函数调用中使用CASE WHEN

v_json_collect.put(
V_FUNCTION,
case V_FUNCTION   
    when 'COUVERTURE_MAGASIN' 
    then COUVERTURE_MAGASIN(i_json_stats)
    when 'COUVERTURE_VOLUMES' 
    then COUVERTURE_VOLUMES(i_json_stats) 
end
);

如果要使用动态查询,请使用以下内容:

execute immediate 
'SELECT v_json_collect.put('|| V_FUNCTION|| ',' ||V_FUNCTION||'('||i_json_stats||'))' into return_value;

干杯!