我想调用用户输入名称的程序。我该怎么做?
例如:我想在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;
答案 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