如何获得以下过程的输出

时间:2019-11-12 07:17:09

标签: oracle plsql dbms-output

当我执行以下查询时,得到的输出是已完成的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程序完成了。但我期望在屏幕上执行该语句的输出结果

3 个答案:

答案 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;