- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我知道为了在 sqlplus 上打印如下内容:
begin
dbms_output.put_line('Hello!');
end;
/
我需要打电话
set serveroutput on;
在那之前。我也知道不需要,但我也可以调用
DBMS_OUTPUT.enable;
之前,以防万一。这对我有用。
但是如果我想继续打印长循环的进度怎么办?对我来说这似乎是不可能的。我已尝试一切方法来打印下面循环的一些进度,但就是不起作用。有什么方法可以做到这一点吗?我什至尝试假脱机到文件但没有成功。
注释 1:我无法截断或分区该表,因为 DBA 不想帮助我,所以我必须使用这个令人讨厌的循环...
注释 2:我注意到一旦循环完成,就会打印整个输出。看起来 Oracle 正在缓冲输出并在最后打印所有内容。我不知道如何避免这种情况并在每次循环迭代时打印。
set serveroutput on;
declare
e number;
i number;
nCount number;
f number;
begin
DBMS_OUTPUT.enable;
dbms_output.put_line('Hello!');
select count(*) into e from my_big_table where upd_dt < to_date(sysdate-64);
f :=trunc(e/10000)+1;
for i in 1..f
loop
delete from my_big_table where upd_dt < to_date(sysdate-64) and rownum<=10000;
commit;
DBMS_OUTPUT.PUT_LINE('Progress: ' || to_char(i) || ' out of ' || to_char(f));
end loop;
end;
感谢您的回答。
最佳答案
对于此类事情有两种标准方法:
在 session 中设置模块和操作 DBMS_APPLICATION_INFO.SET_MODULE :
SQL> exec DBMS_APPLICATION_INFO.SET_MODULE('my_long_process', '1 from 100');
PL/SQL procedure successfully completed.
SQL> select action from v$session where module='my_long_process';
ACTION
----------------------------------------------------------------
1 from 100
设置 session_longops: DBMS_APPLICATION_INFO.SET_SESSION_LONGOPS
我会在您的情况下推荐它,因为它是专门为长时间操作而设计的。
Example on Oracle-Base .
----
PS:dbms_output,put_line将所有输出保存在dbms_output包的集合(嵌套表)变量中,因此您无法从另一个 session 中获取它,并且客户端在用户调用(执行)期间无法获取它。除了 set serveroutput on
之外,您还可以使用 dbms_output.get_lines 获取输出:http://orasql.org/2017/12/10/sqlplus-tips-8-dbms_output-without-serveroutput-on/
顺便说一句,如果您需要过滤或分析 dbms_output 的输出,有时在查询中获取输出很方便,因此您可以在 where 子句中使用过滤字符串或聚合它们: https://gist.github.com/xtender/aa12b537d3884f4ba82eb37db1c93c25
关于oracle - 我的长时间 SQL*Plus 循环在执行期间不打印 DBMS_OUTPUT.PUT_LINE 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63082284/
我使用 Aqua Data Studio 通过分散输出语句来调试存储过程。 我在包中有一个删除语句,它违反了完整性约束: DELETE FROM x WHERE x.ID = an_x_with_ch
这两种说法有什么区别? dbms_output.new_line(); // with no parameters. dbms_output.new_line; // with no param
This question already has answers here: DBMS_OUTPUT.PUT_LINE not printing (7个答案) 5年前关闭。 当执行以下代码时,它仅表
是否dbms_output.put_line降低 plsql 中的性能代码? 最佳答案 每多一行代码都会降低代码的性能。毕竟是额外要执行的指令,至少要消耗一些CPU。所以是的,dbms_output.
我尝试在存储过程中将 dbms_output 大小设置为无限制。 但是它给了我编译错误。所以我在 SQL*Plus 提示符下尝试了以下方法。但我仍然收到缓冲区溢出错误。我该如何克服这个问题? set
尤其是没有 256 个最大字符/行的和 1000000 最大字符/缓冲区限制。 最佳答案 也许这些选项之一会满足您的需求(取决于您是在服务器端还是客户端编写内容): UTL_FILE TEXT_IO
我使用的是 dbeaver 版本 5.1.3。当我对 oracle pl/sql 使用 DBMS_OUTPUT.PUT_LINE 方法时,它的输出不会在任何地方显示。它有一个输出选项卡。它也是空白的。
我需要在 dbms_output 语句中包含单引号。我试过这个: dbms_output.put_line('\''first_name||'\''); 这里的first_name是变量;我需要在单
我正在尝试编写一个基本的 PL/SQL For 循环,但一直出现错误。我的声明是: begin for tab_x in (select unique table_name from al
执行以下代码时,它只是表示该过程已完成,并且不会打印我想要的信息(firstName、lastName),然后打印下表中选择查询中的其他值。 CREATE OR REPLACE PROCEDURE
我需要将循环的输出假脱机到文件中。我的代码如下: set termout off set echo off set colsep '' set linesize 5000 s
我正在尝试将传递给 DBMS_OUTPUT.PUT_LINE() 函数的值打印到 SQL Developer 中的 DBMS_OUTPUT 屏幕。无论我向函数传递什么,输出窗口中都不会打印任何内容。
我试图右对齐某些 PL/SQL 代码的输出,但 dbms_output.put_line 正在修剪字符串中的前导空格。我如何让它停止?或者有没有更好的方法来输出带有前导空格的字符串? dbms_out
我正在学习游标,但无法在 dbms_output.put_line(); 代码是 DECLARE CURSOR c_employees_3i is SELECT * FROM employees_3i
我需要在 pl/sql 中调试来计算程序的时间,我想使用: SELECT systimestamp FROM dual INTO time_db; DBMS_OUTPUT.PUT_LINE('time
我正在尝试在 SQL Developer 中编写 PL/SQL 代码,但它没有显示输出。我的程序编译成功。这是代码: set serveroutput on declare begin dbm
这个问题在这里已经有了答案: Print debugging info from stored procedure in MySQL (5 个答案) 关闭 9 年前。 我尝试编写一个 MySQL 存
我使用以下代码执行导出数据泵。 set serveroutput on; DECLARE ind NUMBER; -- Loop index h1 NUMBER;
我遇到了一个奇怪的问题,它似乎与存储过程中的 CURSOR FOR Loops 非常相关。为清楚起见,我在 DBeaver 中使用 Oracle,并试图遍历表中的所有列并打印出 select 语句的结
我在我的数据库中创建了一个触发器,我遇到了两个我无法修复的错误,我很确定这两个与我对 DBMS_OUTPUT.PUT_LINE 的使用有关, 语句的其余部分不会导致任何错误,尽管它之前有过。 错误:
我是一名优秀的程序员,十分优秀!