【问题标题】:oracle plsql: retrieve runtime parameter values when you call a procedureoracle plsql:调用过程时检索运行时参数值
【发布时间】:2012-08-29 01:59:35
【问题描述】:

当我调用一个过程时,我需要一个通用的方法来获取运行时参数(值)的列表。我需要类似于 $$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.

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

提前感谢您的帮助。

【问题讨论】:

  • 是的,我认为这是同一个问题。两者都没有答案:(我认为没有办法获取参数的值:(
  • 我不认为这是同一个问题。您在不知道参数名称的情况下询问参数的 value。正如现在已删除的答案和链接问题中指出的那样,找到参数的名称很容易,但不是该参数的值。
  • @LucaVaccaro 不确定我是否完全理解。只需检查参数变量本身即可找到“参数值”,就像您在上面的 MY_PROC 示例中所做的那样(“ow”和“tn”包含参数值)。你能更清楚你想做什么吗? Tks
  • @tbone 是的,我做到了,但它仅适用于 MY_PROC。想想 MY_PROC2 MY_PROC3、MY_PROC4,其中任何过程都有自己的参数(例如 MY_PROC2(IN 所有者、IN 表);MY_PROC3(IN 索引、IN ow、IN 表);MY_PROC4(IN idx、IN own、IN t、IN 部分) ). 你怎么看,我得把我的trace写到每一个过程中,注意参数名的准确。我不能复制粘贴。就这样。

标签: oracle stored-procedures parameters plsql oracle10g


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

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

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

    但此解决方案仅适用于预生产,因为性能会急剧下降。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多