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パラメータとして別のプロシージャに渡されるため、その名前が何であるかを知る方法がないためです。プロシージャはコンパイル時です。したがって、2 番目のプロシージャで、名前がパラメーターとして渡されるプロシージャ #1 を実行するにvarchar2は、次のようにします。

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

ネイティブ動的 SQL の詳細

于 2013-09-02T07:53:49.373 に答える