【问题标题】:dynamically calling procedure in oracleoracle中动态调用过程
【发布时间】:2013-09-02 07:22:21
【问题描述】:

我想调用用户已输入名称的过程。我该怎么做?

例如:我想在pocedure2中调用procedure1

create or replace procedure procedure1(
  a in number,
  b in number
  cv_1 out sys_refcursor
)
as
begin
  ....//doin something
end;

程序2:

create or replace procedure procedure2 (
   procedure1name in varchar2,
   a in number,
   b in number,
   cv_1 out sys_refcursor
)
as
begin
   ....//call procedure1 and return cv_1
end;

【问题讨论】:

  • 您可以使用动态 SQL 来完成。前往并在 Oracle Docs 中搜索以了解更多详细信息。
  • 正如@Rachcha 所说,您需要使用动态 SQL。你知道编译时procedure1 的签名吗?您知道在编译时如何将传递给procedure2 的参数映射到对procedure1 的调用吗?

标签: oracle stored-procedures plsql


【解决方案1】:

要做到这一点,您需要使用execute immediate(native dynamic SQL) 语句,因为用户输入过程名称并作为varchar2 参数传递给另一个过程,因此存在无法在编译时告诉过程的名称是什么。因此,在您的第二个过程中,要执行名称作为varchar2 参数传入的过程#1,您可以执行以下操作:

execute immediate 'begin ' || procedure1name || '(:p1, :p2, :p3); end;'
  using in a, b, out cv_1;

Find out more关于原生动态SQL

【讨论】:

  • @Shanku 在上面的示例中,绑定变量((:p1, :p2, :p3)) 用于使用Execute immediateUSING 子句将INOUT 参数传递给procedure1name 过程声明。
  • 感谢您的回复(+1).. 测试后将检查是否接受您的答案.. 可能需要 2-3 天..
猜你喜欢
  • 1970-01-01
  • 2020-10-08
  • 2018-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-27
  • 2018-03-13
相关资源
最近更新 更多