您好,我需要有关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';
感谢帮助
答案 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;
干杯!