1、
 declare 
  mymaxid char;   --问题出在这里
  begin
    mytemp(2,'100',mymaxid);
    end;定义某个变量为char型,且不指定宽度时,它的宽度默认为1
所以在输出时就会出错
把这里改为varchar2(15)2、在函数和存储过程的形参中,不能指定数据的宽度~

解决方案 »

  1.   

    最好的办法,统一数据类型和宽度:create or replace procedure mytemp
      ( mylevel in number,
        myid    in varchar2,
        maxid    out varchar2
      )
     as
     begin
      select max(tempid) into maxid from temp where tempid like myid||'%' and templevel=mylevel;
    end mytemp;
    建立完改存储过程后,我在sql*plus中调用该存储过程:
     declare 
      mymaxid varchar2(15);
      begin
        mytemp(2,'100',mymaxid);
        end;
      

  2.   

    declare 
      mymaxid char;不是吧,范围也不给就定义,呵呵
      

  3.   

    谢谢xinpingf(白开心) 的精心解答,beckhambobo(beckham)的关注,请接分