我有一个PL/SQL过程,其中包含以下静态SQL代码,它按预期工作:
SELECT LISTAGG(value, ',') WITHIN GROUP (ORDER BY NULL)
INTO SELECTED_GEO
FROM JSON_TABLE(v_json_clob, '$.GEO.GEO20[*]' COLUMNS value PATH '$');
现在,我试图通过用变量P_X替换固定值'20'来使代码动态化。变量SELECTED_GEO是一个OUT参数,将由Web应用程序读取。以下是我尝试过的:
EXECUTE IMMEDIATE 'SELECT LISTAGG(value, '','') WITHIN GROUP (ORDER BY NULL) INTO SELECTED_GEO
FROM JSON_TABLE(' || v_json_clob || ', ''$.GEO.GEO' || P_X || '[*]'' COLUMNS value PATH ''$'')';
当我打印动态生成的SQL时,它看起来是正确的,并且与静态版本相匹配。但是,当我执行该过程时,动态SQL版本并没有按预期工作。
我已经验证了v_json_clob和P_GEO_TYPE的值在运行时是正确的。尽管如此,动态版本无法检索预期的数据,而静态版本可以完美地工作。
我得到这个错误:
ORA-00936:缺少表达式
在这种情况下,我的动态SQL方法是否遗漏了什么?如果能深入了解为什么动态版本可能无法按预期运行,将不胜感激。
1条答案
按热度按时间dzhpxtsq1#
使用绑定变量将值传入和传出动态查询:
其输出:
fiddle