在oracle中动态调用过程

时间:2013-09-02 07:22:22

标签: oracle stored-procedures plsql

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

例如:我想在procedure1

中致电pocedure2
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;

1 个答案:

答案 0 :(得分:2)

为了能够这样做,您需要使用execute immediate(本机动态SQL)语句,因为用户正在输入过程名称并将其作为varchar2参数传递给另一个过程,没有办法在编译时告诉过程的名称是什么。因此,在第二个过程中,要执行过程#1,其名称作为varchar2参数传入,您可以执行以下操作:

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

Find out more关于本机动态SQL