现在有一批SP的参数和返回值形式都是一样的,下面的形式 FUNCTION XXXXXXX(
pin_strKind IN VARCHAR2,
pin_strType IN VARCHAR2,
pin_intReqNum IN NUMBER,
pout_intResNum OUT NUMBER,
pout_strNewNum OUT STR_NEW_NUM_ARRAY,
pin_strUserId IN VARCHAR2,
pin_strProgramId IN VARCHAR2
)
RETURN BOOLEAN
我在另外一个SP main 里面需要调用到这批SP中的某一个SP,
具体的调用那一个SP,是通过将SP的名字从参数里面传进来的PROCEDURE main(pin_strSPName IN VARCHAR2)在调用 XXXXXXX 以后,我需要取得返回的pout_intResNum ,pout_strNewNum 还有XXXXXXX 的返回值
因为调用的SP名不定,所以猜测应该用 EXECUTE IMMEDIATE 来做
vCallSP VARCHAR2(2000);
vResNum NUMBER;
vNewNum STR_NEW_NUM_ARRAY;
vReturn BOOLEAN;
vCallSP := pin_strSPName || '(''1'',''090'',1,:vResNum,:vNewNum,''' || pin_UserID || ''',''programID'')';
EXECUTE IMMEDIATE vCallSP USING OUT vResNum,OUT vNewNum into vReturn;但是上面这个写法在导入这个SP的时候就通不过,有哪位高人能指点一下错在哪里。
如果这样做实现不了的话,应该用什么方式来实现?谢谢
pin_strKind IN VARCHAR2,
pin_strType IN VARCHAR2,
pin_intReqNum IN NUMBER,
pout_intResNum OUT NUMBER,
pout_strNewNum OUT STR_NEW_NUM_ARRAY,
pin_strUserId IN VARCHAR2,
pin_strProgramId IN VARCHAR2
)
RETURN BOOLEAN
我在另外一个SP main 里面需要调用到这批SP中的某一个SP,
具体的调用那一个SP,是通过将SP的名字从参数里面传进来的PROCEDURE main(pin_strSPName IN VARCHAR2)在调用 XXXXXXX 以后,我需要取得返回的pout_intResNum ,pout_strNewNum 还有XXXXXXX 的返回值
因为调用的SP名不定,所以猜测应该用 EXECUTE IMMEDIATE 来做
vCallSP VARCHAR2(2000);
vResNum NUMBER;
vNewNum STR_NEW_NUM_ARRAY;
vReturn BOOLEAN;
vCallSP := pin_strSPName || '(''1'',''090'',1,:vResNum,:vNewNum,''' || pin_UserID || ''',''programID'')';
EXECUTE IMMEDIATE vCallSP USING OUT vResNum,OUT vNewNum into vReturn;但是上面这个写法在导入这个SP的时候就通不过,有哪位高人能指点一下错在哪里。
如果这样做实现不了的话,应该用什么方式来实现?谢谢
是不是“source package”简称?建议楼主在这添一个“call ”试试:
vCallSP := 'call '||pin_strSPName || '(''1'',''090'',1,:vResNum,:vNewNum,''' || pin_UserID || ''',''programID'')';
EXECUTE IMMEDIATE vCallSP USING OUT vResNum,OUT vNewNum into vReturn;我想知道上面这一句的写法有什么问题。
EXECUTE IMMEDIATE vCallSP USING vResNum,vNewNum into vReturn;
再试试
我在817里面用call的方法不成功,不知道是不是这个问题,但是begin .. end 肯定没有问题。vCallSP := 'begin 'pin_strSPName || '(''1'',''090'',1,:vResNum,:vNewNum,''' || pin_UserID || ''',''programID''); end;';
EXECUTE IMMEDIATE vCallSP USING OUT vResNum,OUT vNewNum into vReturn;
oracle 817,win 2000 server第一种:带返回参数的存储过程
create or replace procedure p_demo(v_col1 in varchar2,v_col2 out varchar2)
as
begin
v_col2:=v_col1||' out!';
end p_demo;
/declare
v_1 varchar2(20):='aaa';
v_2 varchar2(30);
begin
execute immediate 'call p_demo(:1,:2);' using v_1,out v_2;
dbms_output.put_line(v_2);
end;
/
aaa out!PL/SQL 过程已成功完成。第二种:使用函数
SQL> create or replace function f_demo(v_col1 varchar2) return varchar2
2 as
3 begin
4 return v_col1||' out!';
5 end f_demo;
6 /函数已创建。SQL> declare
2 v_1 varchar2(20):='aaa';
3 v_2 varchar2(30);
4 begin
5 execute immediate 'begin :1:=f_demo(:2); end;' using out v_2,v_1;
6 dbms_output.put_line(v_2);
7 end;
8 /
aaa out!PL/SQL 过程已成功完成。SQL>
call 放在单独的存储过程中可以实现,如果放在包中,用call会出现错误,你遇到过否?