【发布时间】:2019-11-15 09:36:58
【问题描述】:
程序仅执行以下输出,但我试图从执行立即语句的输出中获取结果。
当前输出:
PL/SQL procedure successfully completed.
select 'PRJA' AS "PRJ_ID", EVENT, email,modified_by,modified from PRJA.TableX UNION ALL
select 'PRJB' AS "PRJ_ID", EVENT, email,modified_by,modified from PRJB.TableX UNION ALL
select 'PRJC' AS "PRJ_ID", EVENT, email,modified_by,modified from PRJC.TableX UNION ALL
select 'PRJD' AS "PRJ_ID", EVENT, email,modified_by,modified from PRJD.TableX;
我期待选择/输出上面的结果:
SET SERVEROUTPUT ON
Declare
TYPE T IS TABLE OF MYTABLE.ID%TYPE INDEX BY PLS_INTEGER;
MYROW T;
v_sql varchar2(500);
v_sql2 varchar2(500);
v_prj_id varchar2(4000):='PRJA,PRJB,PRJC,PRJD';
BEGIN
FOR i IN (SELECT trim(regexp_substr(v_prj_id, '[^,]+', 1, LEVEL)) l
FROM dual
CONNECT BY LEVEL <= regexp_count(v_prj_id, ',') + 1
) LOOP
v_sql := v_sql || 'select '''|| i.l ||''' AS "PRJ_ID", EVENT, email,modified_by,modified from '
|| i.l || '.TableX UNION ALL ' || chr(10) ;
END LOOP;
v_sql2 := RTRIM(v_sql, 'UNION ALL ' || chr(10) ) || ';';
EXECUTE IMMEDIATE v_sql2 BULK COLLECT INTO MYROW;
DBMS_OUTPUT.PUT_LINE(MYROW.XXX);
END;
/
【问题讨论】:
-
你尝试设置 serveroutput on
-
@Andrew 是的。它也列在我的查询顶部。
-
尝试使用 v_sql2 := RTRIM(v_sql, 'UNION ALL ' || chr(10) ) || ';';立即执行 v_sql2 批量收集到 MYROW; DBMS_OUTPUT.PUT_LINE(MYROW.XXX);在 for 循环中,因为您要打印此选择查询的结果,而不是选择查询本身...
标签: oracle plsql dynamic-sql