试了将近1个小时,早知道多baidu一下了,死在这个using in/out 没加上,乃乃的。
SQL> drop table emp;
表已丢弃。
SQL> create table emp(A varchar2(10),B varchar2(10),C varchar2(10));
表已创建。
SQL> insert into emp values('1','1','1');
已创建 1 行。
SQL> insert into emp values('2','2','2');
已创建 1 行。
SQL> insert into emp values('3','3','3');
已创建 1 行。
SQL>
SQL> create or replace procedure p_test_dym(
2 i_A in varchar2,
3 o_B out varchar2
4 )
5 as
6 begin
7 select B into o_B from emp where emp.A = i_A;
8 end;
9 /
过程已创建。
SQL>
SQL> create or replace procedure p_call_dym(
2 v_proc in varchar2,
3 v_param in varchar2
4 )
5 as
6 v_2 emp.B%TYPE;
7 begin
8 execute immediate 'call '||v_proc||'(:1,:2)' using in v_param,out v_2;
9 dbms_output.put_line(v_2);
10 end;
11 /
过程已创建。
SQL>
SQL> exec p_call_dym('p_test_dym','2');
2
PL/SQL 过程已成功完成。
SQL>