5

当我调用一个过程时,我需要一个通用的方法来获取运行时参数(值)的列表。我需要类似于 $$PLSQL_UNIT 的东西,它返回正在运行的过程的名称。(plsql Oracle 10g)

例如看这个示例程序:(它只是打印自己的名称和参数)

CREATE OR REPLACE PROCEDURE  MY_PROC(ow in varchar2, tn IN varchar2)
 IS

BEGIN
     dbms_output.put_line('proc_name: '||$$PLSQL_UNIT||' parameters: '|| ow||' '||tn  );

    EXCEPTION
    WHEN OTHERS THEN 
       DBMS_OUTPUT.PUT_LINE('ERRORE: ' ||SQLERRM);

END MY_PROC;
/

运行过程产生以下输出:

SQL> 
  1   BEGIN
  2     IBAD_OWN.MY_PROC('first_par', 'second_par');
  3   END;
  4  /

proc_name: MY_PROC parameters: first_par second_par

PL/SQL procedure successfully completed.

我不满意,因为我无法在所有程序中复制和粘贴,因为我必须对每个程序进行硬编码以设置其正确的参数变量。

在此先感谢您的帮助。

4

2 回答 2

2

在 Oracle PL/SQL 中动态检索传递给过程的参数值是不可能的。该语言根本不是为处理这种操作而设计的。

顺便说一句,在位于包内的过程中,$$PLSQL_UNIT只会返回包的名称。我发现最好在每个包含过程名称的过程中定义一个一致命名的常量。

于 2012-09-06T13:25:26.777 回答
1

当我想要与您相同的功能时,我没有找到任何好的内置解决方案。

我所做的是:编写了修改函数/过程/包的原始主体的 DB 级触发器。此触发器在“开始”从“user_arguments”动态生成的代码之后立即添加。

另外,在此之后,我在此触发器中包含代码,该代码在发生异常时记录对 procs 的调用。

另外,您可以跟踪 procs 调用以及更多有趣的事情。

但是这个解决方案只适用于预生产,因为性能会急剧下降。

PS。对不起,我的英语不好。

于 2012-09-10T03:34:36.037 回答