参考下面的程序,它是从表中获得存储过程的名称,然后执行该过程:
SQL> CREATE OR REPLACE PROCEDURE MYPR
2 (av out number)
3 IS
4 BEGIN
5 av:= 99;
6 END;
7 /过程已创建。SQL> CREATE OR REPLACE PROCEDURE MYPR2
2 (av out varchar2)
3 IS
4 lvr number(3);
5 lvn varchar2(10);
6 lvsql varchar2(100);
7 lvtblnm varchar2(10);
8 BEGIN
9 select 'mypr(:a)' into lvtblnm from dual; -- 使用你自己的表
10 execute immediate 'begin ' || lvtblnm || '; end;' using out lvr;
11 dbms_output.put_line(lvr);
12 av:='OK';
13 END;
14 /过程已创建。SQL> declare
2 lvok varchar2(10);
3 begin
4 mypr2(lvok);
5 dbms_output.put_line(lvok);
6 end;
7 /
99
OKPL/SQL 过程已成功完成。
SQL> CREATE OR REPLACE PROCEDURE MYPR
2 (av out number)
3 IS
4 BEGIN
5 av:= 99;
6 END;
7 /过程已创建。SQL> CREATE OR REPLACE PROCEDURE MYPR2
2 (av out varchar2)
3 IS
4 lvr number(3);
5 lvn varchar2(10);
6 lvsql varchar2(100);
7 lvtblnm varchar2(10);
8 BEGIN
9 select 'mypr(:a)' into lvtblnm from dual; -- 使用你自己的表
10 execute immediate 'begin ' || lvtblnm || '; end;' using out lvr;
11 dbms_output.put_line(lvr);
12 av:='OK';
13 END;
14 /过程已创建。SQL> declare
2 lvok varchar2(10);
3 begin
4 mypr2(lvok);
5 dbms_output.put_line(lvok);
6 end;
7 /
99
OKPL/SQL 过程已成功完成。
你也可以用dbms_sql包
都可以,建议用本地动态sql
这那里是什么高技术,查查书,都有的
呵呵
as
begin
null;
end;
/
create procedure b
as
begin
a;
end;
/
create or replace procedure GetDate(vinfo in varchar2,vStrDate out varchar2)
as
begin
dbms_output.put_line(vinfo);
select To_char(sysdate,'yyyymm') into vStrDate from dual;
end;
/create or replace procedure ProTest(err out integer)
as
vStrDate varchar2(20);
vProName varchar2(30);
vTestInfo varchar2(40);
begin
vTestInfo:='Helle world!';
vProName:='GetDate(:vinfo,:vStrDate)';
vStrDate:='this is test';
execute immediate 'begin '||vProName||'; end '||';' using in vTestInfo,out vStrDate;
dbms_output.put_line(vStrDate);
dbms_output.put_line(vProName);
err:=0;
exception
when others then
err:=SQLCODE;
end;
/set serveroutput onvar err number
exec ProTest (:err);
print err