oracle - 如何在 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 ,G46.SEQ_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 ,G46.SEQ_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 ,G46.SEQ_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>
推荐阅读
- react-styleguidist - 在没有关联组件文件的样式指南中包含降价文件?
- mysql - 解释特定行的mysql时间戳
- excel - PageSetup.PrintArea 用于分隔的多个范围
- database - 带有自定义数据库的wordpress功能
- java - 解释在 Kotlin 方法上使用 @JvmOverloads 生成的 Java 代码
- javascript - Amcharts 将柱形条设置为特定颜色不起作用
- xcode10 - 打印大量文本时,Xcode 10 控制台日志很慢
- reactjs - 嵌套数组上的 this.setState
- gradle - 在运行已经完成的任务之前构建 Gradle getProperties
- javascript - 为什么 CTRL + A 在我的 sapui5 应用程序中不起作用?