oracle去包名称,目前在Oracle中的包中执行过程名称

在12c中,当前的子程序名称只是:

utl_call_stack.subprogram(1)(2);

目前的包装也可以从中获得

utl_call_stack.subprogram(1)(1);

但通常使用$$plsql_unit更容易.您还可以获取限定名称(package.procedure):

utl_call_stack.concatenate_subprogram(utl_call_stack.subprogram(1));

但是,我想不出任何过程或函数(或对象方法)需要自己名称的情况.此功能在日志记录过程中非常有用,在这种情况下,“谁给我打电话?”代码应该在记录器中,而不是在每个调用它的东西中重复.因此,我强烈建议避免任何“我是谁?”程序中的逻辑.相反,在你的记录器中放置这样的东西(需要12.1或更高版本):

create or replace procedure logdemo

as

k_calling_package constant varchar2(30) := utl_call_stack.subprogram(2)(1);

k_calling_subprog constant varchar2(30) := utl_call_stack.subprogram(2)(2);

begin

dbms_output.put_line

( $$plsql_unit ||

' called from package '||k_calling_package||', subprogram '||k_calling_subprog );

end logdemo;

不幸的是,它在11g中稍微复杂一点,因为你必须解析dbms_utility.format_call_stack,因为这只给你包名和行号(在换行分隔的文本字符串中),你必须查询all_source以找到子程序名称.

如果你澄清它是什么,我可以发布一些11g代码.在我的11g记录器中,我发现根据sqlcode等捕获dbms_utility.format_error_backtrace以及dbms_utility.format_call_stack很有用,因此有一堆特定于日志记录的逻辑,如果你只是想捕获当前值,则可能不需要程序名称由于其他原因.

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值