当我执行以下查询时,得到的输出是已完成的PL / SQL过程。而不是实际结果。如何在屏幕上输出该语句的执行结果
Declare
v_sql varchar2(500);
v_schema varchar(30);
v_event varchar2(500):= 'EVENT NAME';
v_email varchar2(200) := 'Name@XYZ.com';
v_prj_id varchar2(4000):='ProjectA,ProjectB,ProjectC,ProjectD';
BEGIN
Dbms_Output.Put_Line('v_prj_id='||v_prj_id);
--
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
--
Dbms_Output.Put_Line('---------------------');
--
--
v_sql := 'UPDATE ' || i.l|| '.Table set email = email ||'';''||:1 WHERE
EVENT = :2' ;
--
Dbms_Output.Put_Line('v_sql='||v_sql);
--
begin
EXECUTE IMMEDIATE v_sql USING v_email, v_event;
Exception
when others then
Dbms_Output.Put_Line('sqlerrm='||sqlerrm);
End;
--
END LOOP;
END;
获得的实际结果是PL / SQL程序完成了。但我期望在屏幕上执行该语句的输出结果
答案 0 :(得分:0)
SET SERVEROUTPUT ON
---执行您的程序
答案 1 :(得分:0)
可以使用SQL%ROWCOUNT检查更新的总行数。
begin
EXECUTE IMMEDIATE v_sql USING v_email, v_event;
DBMS_OUTPUT.PUT_LINE(SQL%ROWCOUNT||' rows are updated.');
答案 2 :(得分:0)
当您执行PL / SQL过程时,输出将为"PL/SQL procedure successfully completed."
,否则将显示错误。
如果要输出特定的内容,则必须dbms_output.put_line
。
即使我不确定您要输出什么,也可以执行以下操作:
begin
EXECUTE IMMEDIATE v_sql USING v_email, v_event;
dbms_output.put_line(SQL%ROWCOUNT||' rows are updated.');
exception
when others then
dbms_output.put_Line('sqlerrm='||sqlerrm);
end;