在 PLSQL 过程中获取输出
Getting output in PLSQL procedure
通常,在 SQL 开发人员中,如果有人这样做,比方说,INSERT
语句,那么 Script output
中会有一个输出:
insert into a (a) values (1);
1 rows inserted.
如果,那么,我们编译成程序:
create or replace procedure testp as
begin
insert into a (a) values (1);
end;
PROCEDURE TESTP compiled
并调用它:
execute testp
anonymous block completed
没有关于插入了多少行的输出。那么如何在程序中开启详细输出呢?
如果您只想 "detailed output" 为用户打印出来 运行 一个在 IDE 中启用适当设置的交互过程,您可以
create or replace procedure testp as
begin
insert into a (a) values (1);
dbms_output.put_line( sql%rowcount || ' row inserted. ' );
end;
假设调用者使用的应用程序知道如何显示写入 dbms_output
的内容(即 IDE),他们已启用 dbms_output
(使用dbms_output
window 在 SQL 开发人员中),他们已经分配了足够的缓冲区等,调用者将看到“插入 1 行”(如果需要,可以添加更多代码以编程方式处理单数/复数的语法)。
为什么你想要那种输出?这通常意味着您应该对某种日志 table 进行一些真正的记录,而不是希望交互式用户是 运行 您的代码并看到输出。
There is no output about how many rows were inserted. How then, can we turn on detailed output in procedure?
SQL 和 PL/SQL 不一样。在 PL/SQL 中,您可以使用 SQL%ROWCOUNT 来获取受 DML 影响的总行数。
要在输出缓冲区中获取它,请使用 DBMS_OUTPUT.PUT_LINE。
例如,
DBMS_OUTPUT.PUT_LINE(SQL%ROWCOUNT || ' rows were inserted' );
确保在您的客户端中启用 DBMS_OUTPUT。
在SQL*Plus中,执行:
set serveroutput on
其他基于 GUI 的客户端工具有启用它的选项。
不过我不建议 DBMS_OUTPUT 投入生产。您可以将其用于记录目的。就像您想每天记录受程序影响的行数一样。
我建议不要使用 dbms_output 尝试合并 OUT 参数并将 SQL%ROWCOUNT 分配给该变量。将 dbms_output 保留在生产环境中是一个非常糟糕的主意。
create or replace procedure testp
(p_row_cnt_out OUT PLS_INTEGER)
as
begin
insert into a (a) values (1);
p_row_cnt_out:= SQL%ROWCOUNT;
--dbms_output.put_line( sql%rowcount || ' row inserted. ' );
end;
通常,在 SQL 开发人员中,如果有人这样做,比方说,INSERT
语句,那么 Script output
中会有一个输出:
insert into a (a) values (1);
1 rows inserted.
如果,那么,我们编译成程序:
create or replace procedure testp as
begin
insert into a (a) values (1);
end;
PROCEDURE TESTP compiled
并调用它:
execute testp
anonymous block completed
没有关于插入了多少行的输出。那么如何在程序中开启详细输出呢?
如果您只想 "detailed output" 为用户打印出来 运行 一个在 IDE 中启用适当设置的交互过程,您可以
create or replace procedure testp as
begin
insert into a (a) values (1);
dbms_output.put_line( sql%rowcount || ' row inserted. ' );
end;
假设调用者使用的应用程序知道如何显示写入 dbms_output
的内容(即 IDE),他们已启用 dbms_output
(使用dbms_output
window 在 SQL 开发人员中),他们已经分配了足够的缓冲区等,调用者将看到“插入 1 行”(如果需要,可以添加更多代码以编程方式处理单数/复数的语法)。
为什么你想要那种输出?这通常意味着您应该对某种日志 table 进行一些真正的记录,而不是希望交互式用户是 运行 您的代码并看到输出。
There is no output about how many rows were inserted. How then, can we turn on detailed output in procedure?
SQL 和 PL/SQL 不一样。在 PL/SQL 中,您可以使用 SQL%ROWCOUNT 来获取受 DML 影响的总行数。
要在输出缓冲区中获取它,请使用 DBMS_OUTPUT.PUT_LINE。
例如,
DBMS_OUTPUT.PUT_LINE(SQL%ROWCOUNT || ' rows were inserted' );
确保在您的客户端中启用 DBMS_OUTPUT。
在SQL*Plus中,执行:
set serveroutput on
其他基于 GUI 的客户端工具有启用它的选项。
不过我不建议 DBMS_OUTPUT 投入生产。您可以将其用于记录目的。就像您想每天记录受程序影响的行数一样。
我建议不要使用 dbms_output 尝试合并 OUT 参数并将 SQL%ROWCOUNT 分配给该变量。将 dbms_output 保留在生产环境中是一个非常糟糕的主意。
create or replace procedure testp
(p_row_cnt_out OUT PLS_INTEGER)
as
begin
insert into a (a) values (1);
p_row_cnt_out:= SQL%ROWCOUNT;
--dbms_output.put_line( sql%rowcount || ' row inserted. ' );
end;