【问题标题】:PL/SQL : How to accept input inside procedurePL/SQL:如何在过程中接受输入
【发布时间】:2018-03-28 21:20:34
【问题描述】:

我有以下过程,我需要在其中接受架构名称。该程序将 仅在该架构中执行。

CREATE OR REPLACE PROCEDURE my_procedure() AS
BEGIN
FCSCHEMA VARCHAR2(20) := :SCHEMA; --How to accept the parameter and pass it on to below code.


   result := FCSCHEMA.my_package.my_function(p_param1);

END;
/

目前我收到PLS-00049: bad bind variable 'SCHEMA' 错误。

【问题讨论】:

  • passing in table name as plsql parameter 的可能重复项。同样的方法适用于任何东西 - 架构名称、表名称、列名称等。
  • @Dmitry,动态调用函数与选择表完全不同。
  • 架构是您在编译过程时尝试指定一次的东西,还是每次调用过程时都可以更改的东西?
  • @AlexPoole 是在编译过程的时候。
  • 那么使程序体动态化并没有什么意义;要么在编译之前更改过程主体以硬编码要引用的模式(而不是将其硬编码在变量中!?),或者如果你通过例如运行它SQL*Plus 可以在编译期间使用替换变量来提供模式名称吗?

标签: oracle plsql parameter-passing


【解决方案1】:

试试这个:

CREATE OR REPLACE PROCEDURE my_procedure() AS

FCSCHEMA VARCHAR2(20) := 'SCHEMA'; 
BEGIN

   execute immediate 'BEGIN :res := '||FCSCHEMA ||'.my_package.my_function(:p_param1); END;' 
        USING OUT result, IN p_param1;

END;
/

【讨论】:

  • IN p_param1 后面的分号是必需的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-24
  • 2014-01-03
  • 2023-04-05
相关资源
最近更新 更多