是否可以在执行包中的过程时向用户显示注释。我的包有3个程序。我打电话给每个人。我想在控制台上显示注释,如xyz正在执行的程序,程序执行成功。我在DBMS_OUTPUT.PUT_LINE('PROCEDURE EXECUTED SUCCESSFULLY')
这样的程序中添加了评论,但对我没有用。
仅供参考我在Windows 7系统中使用oracle 11g。
答案 0 :(得分:7)
在程序运行时,您无法使用DBMS_OUTPUT
显示有关过程的信息。这是因为DBMS_OUTPUT.put_line
不会在屏幕上显示数据,而是将数据放入稍后由调用客户端读取的队列中(此队列在其事务之外也是不可见的)。如果使用SQL*Plus
,如果您有SET SERVEROUTPUT ON
,则会在程序结束时自动读取并显示队列。
存在其他方法来跟踪程序运行时的进度:
autoflush
设置为true,UTL_FILE.put_line
将直接写入。DBMS_APPLICATION_INFO
设置会话变量。通过查询v$session
可以使用另一个会话读取这些变量。AUTONOMOUS_TRANSACTIONS
在专用表中记录进度信息。该表可以由另一个会话同时查询。正如您所看到的,在编写信息时需要另一个进程来读取信息。在某些应用程序中,这可以通过在新的单独进程中运行主批处理作业来实现,例如通过调用DBMS_JOB
或DBMS_SCHEDULER
,同时调用事务在进度表或文件上循环,直到作业为止完整。
SQL * Plus不是交互式客户端,您需要一些更复杂的环境才能实现此功能。