oracle存储过程能否返回本身的名字?例如有个存储过程叫 P_RUN,有没有什么函数能返回它的名字“P_RUN”。起因是我想让存储过程运行后,就自动记录自己的运行时间,报错信息等等,其实就是想实现存储过程的运行日志。这就需要保存它自己的名字。如果没有上面的功能的话,我还要人为的在过程里定义一个变量,并且人工给它赋值为 “P_RUN”。例如 v_proc_name varchar2(100) := 'P_RUN';感觉这样太麻烦,而且容易出错。

解决方案 »

  1.   

    那些日志信息你想保存到哪里去?可不可以考虑用另一种办法来执行?
    如果说保存到一个日志表时,那你在存储过程结束的前一条语句直接:
    insert 日志表(.....) values('存储过程名',sysdate....);这样也可以记录存储过程执行日志信息;
      

  2.   

    通过对DBMS_UTILITY.FORMAT_CALL_STACK进行多次substr()可以得到存储过程的名字.
      

  3.   

    似乎没有这样的函数,但是有一个方法,楼主可以对你自己的存储过程名称编个号,并建立一个表proc_code,如code       name
    1          P_RUN
    2          P_GET
    3          P_SET等等,然后自己编写一个函数get_proc_name,如
    CREATE OR REPLACE get_proc_name(p_code NUMBER) RETURN VARCHAR2 AS
      v_name proc_name.name%TYPE;
    BEGIN
      SELECT name INTO v_name FROM proc_code WHERE code = p_code;
      RETURN v_name;
    END;
    /
      

  4.   

    select dbms_utility.format_call_stack from dual;
    不错,学习,貌似这个东东是用c实现的
      

  5.   

    比较支持自己记录日志,我以前也是这么做的,存储过程名不会随便改的,过程名COPY过去就好了.