如何解决如何在 EXECUTE IMMEDIATE 中使用 WITH 子句
我正在尝试在执行立即语句之一中使用 with 子句。它运行良好,但不提供输出。它说匿名块已完成。我已经尝试了 SET SERVEROUTPUT ON 命令,但仍然不起作用。有人可以帮我解决这个问题吗。
begin
execute immediate 'WITH GG AS (
SELECT G46.PROV_NUM,G46.SEQ_NUM,FM46G_ALTID_TYPE_1 AS ALTID_TYPE,ALTID_1 AS ALTID,FM46G_ALTID_SRC_1 AS ALTID_SRC FROM SPSMDMRW.SCW_CFF_46G G46
UNION
SELECT G46.PROV_NUM,ALTID_TYPE_2 AS ALTID_TYPE,ALTID_2 AS ALTID,FM46G_ALTID_SRC_1 AS ALTID_SRC FROM SPSMDMRW.SCW_CFF_46G G46
UNION
SELECT G46.PROV_NUM,ALTID_TYPE_3 AS ALTID_TYPE,ALTID_3 AS ALTID,ALTID_SRC_2 AS ALTID_SRC FROM SPSMDMRW.SCW_CFF_46G G46
UNION
SELECT G46.PROV_NUM,ALTID_TYPE_4 AS ALTID_TYPE,ALTID_4 AS ALTID,ALTID_SRC_3 AS ALTID_SRC FROM SPSMDMRW.SCW_CFF_46G G46
)
select * from GG';
end;
解决方法
这不是 WITH
分解子句,而是您没有将结果提取到任何内容中的事实。
应该是这样的:
SQL> set serveroutput on
SQL>
SQL> declare
2 l_dname sys.odcivarchar2list;
3 begin
4 execute immediate 'with gg as
5 (select ename from emp where deptno = 10
6 union all
7 select ename from emp where deptno = 30
8 )
9 select ename from gg'
10 bulk collect into l_dname;
11
12 for i in l_dname.first .. l_dname.last loop
13 dbms_output.put_line(l_dname(i));
14 end loop;
15 end;
16 /
ALLEN
WARD
MARTIN
BLAKE
TURNER
JAMES
PL/SQL procedure successfully completed.
SQL>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。