2

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

例如:我想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;
4

1 回答 1

3

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

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

了解有关本机动态 SQL

于 2013-09-02T07:53:49.373 回答