plsql中DBMS_OUTPUT的替代方法

时间:2016-04-16 01:20:33

标签: sql oracle plsql

我试图找到一种方法来捕获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;
/

2 个答案:

答案 0 :(得分:1)

嗯,没有机会创建表或(表)函数,实际上我只看到以下选项:

1)如果它适用于具有易失性输出且您的调试器可以显示session-info,则用户DBMS_APPLICATION_INFO.set_action(action_name => 'up to 32 characters');显示输出

2)如果您对目录有(写)访问权限,则可以使用utl_file - package(fopen,put_line,close)将输出写入日志文件

3)您可以使用utl_tcp - package将输出发送到客户端上的listenig应用程序(open_connection,write_text,close_connection),但这需要ACL设置,允许您建立此类连接

答案 1 :(得分:0)

  1. 在另一个数据库中创建一个日志表,最好是测试数据库。
  2. 创建db_link
  3. 将日志插入日志记录表。
  4. 问题解决了。您没有在实时数据库中创建任何对象。 说真的,切换调试器。 Oracle SQL Developer是免费的,并且支持dbms_output。