oracle plsql中DBMS_OUTPUT的替代方法

ugmeyewa  于 2023-10-16  发布在  Oracle
关注(0)|答案(3)|浏览(132)

我试图找到一种方法来捕获输出从一个sql语句。我想使用的调试器不支持DBMS_OUTPUT,所以这不是一个选项。这也是一个活动数据库,因此创建新表或过程是不可能的。有什么想法吗?

declare
  type NumberArray is array(100) of clock_in_out.pr_emp_id%Type;
  type DateArray is array(1000) of date;
  emps NumberArray;
  times DateArray;

BEGIN
  select unique pr_emp_id
  BULK COLLECT INTO emps
  from clock_in_out;

  FOR i IN emps.FIRST .. emps.LAST
  LOOP
    select time_in_out
    BULK COLLECT INTO times
    from clock_in_out
    where pr_emp_id = emps(i)
    order by time_in_out;

    FOR j IN 2 .. times.COUNT LOOP

      IF ( 86400 * ( times(j) - times(j-1) )) <= 5 THEN
        DBMS_OUTPUT.PUT_LINE('Result Found' );
        DBMS_OUTPUT.PUT_LINE(emps(i) );
        DBMS_OUTPUT.PUT_LINE( times(j) );
        DBMS_OUTPUT.PUT_LINE( 86400 * ( times(j) - times(j-1) ));
        DBMS_OUTPUT.PUT_LINE(' ');
      END IF;

    END LOOP;
  END LOOP;
END;
/
iibxawm4

iibxawm41#

嗯,没有机会创建一个表,或一个(表-)函数,实际上我只看到以下选项:
1)如果它适用于具有volatile输出,并且您的调试器可以显示会话信息,则用户DBMS_APPLICATION_INFO.set_action(action_name => 'up to 32 characters');显示输出
2)如果你有一个目录的(写-)访问权,你可以使用utl_file - package(fopen,put_line,close)把你的输出写到日志文件中
3)您可以使用utl_tcp - package将输出发送到客户端上的一个连接应用程序(open_connection,write_text,close_connection),但这需要ACL设置,允许您建立这样的连接

ev7lccsx

ev7lccsx2#

1.在另一个数据库(最好是test db)中创建日志记录表。
1.创建db_link
1.将日志插入日志记录表。
问题解决了您没有在活动数据库中创建任何对象。说真的,开关调试器。Oracle SQL Developer是免费的,支持dbms_output。

ejk8hzay

ejk8hzay3#

在SQL-Developer中,您可能需要添加

set serveroutput on;

相关问题