我试图找到一种方法来捕获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;
/
答案 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)
问题解决了。您没有在实时数据库中创建任何对象。 说真的,切换调试器。 Oracle SQL Developer是免费的,并且支持dbms_output。