嵌套表和立即执行
Posted
技术标签:
【中文标题】嵌套表和立即执行【英文标题】:Nested Table and EXECUTE IMMEDIATE 【发布时间】:2014-11-18 15:33:04 【问题描述】:我总是遇到从我的 PL/SQL 过程中截取的以下问题 我需要变量来创建动态 SQL 语句,但我还需要嵌套表。
l_code list_code := list_code();
l_code := PKG_DATA.GET_CODES(in_code) ;
v_sql := 'SELECT ' || in_var_name ||'
FROM view
WHERE supplier = '||in_supplier ||'
AND factory = '|| in_factory ||'
AND code IN ('|| ( SELECT * FROM TABLE(l_code) )||') ';
EXECUTE IMMEDIATE v_sql
INTO v_value;
v_value 是一个嵌套表
[错误] PLS-00103 (60: 46): PLS-00103: 遇到符号“SELECT” 预期以下情况之一时:
( - + case mod new not null continue, [错误] PLS-00103 (60: 74): PLS-00103: 在期待其中之一时遇到符号“)” 以下:
, ;为了 作为有相交负序的组开始联合 wh
有没有人有想法或剪断?
谢谢
【问题讨论】:
【参考方案1】:v_sql := 'SELECT ' || in_var_name
|| ' FROM view '
|| ' WHERE supplier = :supplier AND factory = :factory '
|| ' AND code IN (SELECT * FROM TABLE(PKG_DATA.GET_CODES(:code)))';
EXECUTE IMMEDIATE v_sql INTO v_value USING in_supplier, in_factory, in_code;
【讨论】:
您的代码中唯一的错误是:'EXECUTE IMMEDIATE v_sql using in_supplier, in_factory, in_code INTO v_value; ' .更正:'使用 in_supplier、in_factory、in_code 立即执行 v_sql INTO v_value; '【参考方案2】:我建议使用绑定变量
v_sql := 'SELECT :in_var_name
FROM view
WHERE supplier = :in_supplier
AND factory = :in_factory
AND code IN (SELECT * FROM TABLE(:l_code) )) ';
EXECUTE IMMEDIATE v_sql
INTO v_value
USING in_var_name, in_supplier, in_factory, l_code;
但很有可能,您根本不需要动态 SQL:
SELECT in_var_name
INTO v_value
FROM view
WHERE supplier = in_supplier
AND factory = in_factory
AND code IN (SELECT * FROM TABLE(l_code));
【讨论】:
以上是关于嵌套表和立即执行的主要内容,如果未能解决你的问题,请参考以下文章