java 调用oracle包_获取Oracle中的调用包/过程

如果您只对调用过程感兴趣,可以使用简短示例: DBMS_OUTPUT.PUT_LINE(UTL_Call_Stack.Concatenate_Subprogram(UTL_Call_Stack.Subprogram(2)));

或者打印完整的调用堆栈:

FOR j IN REVERSE 1..UTL_Call_Stack.Dynamic_Depth() LOOP

DBMS_OUTPUT.PUT_LINE(UTL_Call_Stack.Concatenate_Subprogram(UTL_Call_Stack.Subprogram(j)));

END LOOP;

包装示例:

CREATE OR REPLACE PACKAGE log_test IS

PROCEDURE write_exec_log(msg VARCHAR2);

PROCEDURE TestProc1;

PROCEDURE TestProc2;

PROCEDURE TestProc3;

END log_test;

/

CREATE OR REPLACE PACKAGE BODY log_test IS

PROCEDURE write_exec_log(msg VARCHAR2) IS

BEGIN

DBMS_OUTPUT.PUT_LINE(msg);

DBMS_OUTPUT.PUT_LINE('-- ');

DBMS_OUTPUT.PUT_LINE('calling procedure/function: '

||UTL_Call_Stack.Concatenate_Subprogram(

UTL_Call_Stack.Subprogram(2)

)

);

DBMS_OUTPUT.PUT_LINE('-- ');

DBMS_OUTPUT.PUT_LINE('Call Stack');

FOR j IN REVERSE 1..UTL_Call_Stack.Dynamic_Depth() LOOP

DBMS_OUTPUT.PUT_LINE(UTL_Call_Stack.Concatenate_Subprogram(

UTL_Call_Stack.Subprogram(j)

)

);

END LOOP;

END write_exec_log;

PROCEDURE TestProc1 IS

BEGIN

write_exec_log( 'msg TestProc1' );

END TestProc1;

PROCEDURE TestProc2 IS

BEGIN

write_exec_log( 'msg TestProc2' );

END TestProc2;

PROCEDURE TestProc3 IS

BEGIN

TestProc2;

END TestProc3;

END log_test;

/

exec log_test.TestProc1

exec log_test.TestProc2

exec log_test.TestProc3

(对不起,写完时没有sqlfiddle,没有12c)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值