存储过程不熟啊,现在有2个问题
1.调用有返回值的存储过程,如果传参数的话,出参的参数用不用也传进去?

procedure wwt_test2(inchar in varchar2,outchar out varchar2) is      
begin      
    outchar:=inchar;    
         
end wwt_test2;
              
procedure wwt_test1  is   
myString varchar(1000);   
tempString varchar(1000);   
sqlText varchar(1000);   begin   
   
tempString :='already';   
wwt_test2('wwt',tempString); --问题1,如果在这调用wwt_test2方法的话,出参必须要传进去么,可不可以不传(写成这样wwt_test2('wwt')),如果必须传的话 
myString:=tempString;   在这里tempString的值是wwt_test2中返回的'wwt'么;是不是如果wwt_test2中有跟wwt_test1出参数中一样的变量,这个变量就被wwt_test1返回值赋值了?tempString :=wwt_test2('wwt',tempString);问题2 在一个wwt_test1中调用另一个有返回值的存储过程B,可不可以这样调wwt_test2,这样直接去赋值。
sqlText:='insert into wwt_table_test  values('''||myString||''')';   
dbms_output.put_line('==>'||sqlText);   end wwt_test1;   

解决方案 »

  1.   

    问题1,当然会被返回值覆盖了,但你这么做有意义吗?那还用参数返回干嘛?
    问题2,你是不是说 tempString := wwt_test2('wwt', otherFuncB); 如果这样的话,当然可以。
      

  2.   

    问题1:存储过程的参数,出参是一定要带的,入参如果有默认值的话,还可以不带
    问题2:你存储过程是通过出参来将结果传递出来,是不能使用 tempString := wwt_test2('wwt', otherFuncB);
    按照你 wwt_test2 存储过程的声明,你应该这样使用wwt_test2(otherFuncB, tempString);
      

  3.   

    第二个问题,不好意思,我打错字了,应该是这样描述的
    问题2 在一个wwt_test1中调用另一个有返回值的wwt_test2,可不可以这样调wwt_test2,这样直接去赋值。tempString :=wwt_test2('wwt',tempString);