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

目前在Oracle中的包中执行过程名称,第1张

概述有没有办法在Oracle中的包中获取当前正在执行过程名称? create or replace package test_pkgas procedure proc1;end test_pkg;create or replace package body test_pkgas procedure proc1 is -- // Get the Pr @H_404_1@ 有没有办法在Oracle中的包中获取当前正在执行的过程名称?

create or replace package test_pkgas    procedure proc1;end test_pkg;create or replace package body test_pkgas    procedure proc1     is        -- // Get the Procedure name here?? //    end proc1;end test_pkg;
解决方法 在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 logdemoas    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很有用,因此有一堆特定于日志记录的逻辑,如果你只是想捕获当前值,则可能不需要程序名称由于其他原因.

总结

以上是内存溢出为你收集整理的目前在Oracle中的包中执行过程名称全部内容,希望文章能够帮你解决目前在Oracle中的包中执行过程名称所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1165494.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存