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