if is_yandm = '0' or is_yandm is null then
  is_yandm :='001';
else
  is_yandm := cast(10000+cast(is_yandm as int)+1 as varchar2(5));
end if;这个语句在存储过程中报错pls-00103SELECT cast(10000+cast('123' as int)+1 as varchar(5)) FROM DUAL 在pl/sql里面执行时没问题的  问题出在哪了呢 

解决方案 »

  1.   

    if is_yandm = '0' or is_yandm is null then
      is_yandm :='001';
    else
      is_yandm := ‘1’;
    end if;
    这么写在存储过程里编译是通过的 所以问题就出在
    cast(10000+cast(is_yandm as int)+1 as varchar2(5));
      

  2.   

    declare yandm varchar2(5); --外面定义个变量
     --这样取值
     select cast(10000+cast(is_yandm as int)+1 as varchar2(5)) into yandm from dual; 
    if is_yandm = '0' or is_yandm is null then
      is_yandm :='001';
    else
      is_yandm := yandm --赋值
    end if;
      

  3.   

    if is_yandm = '0' or is_yandm is null then
      is_yandm :='001';
    else
      is_yandm := cast(10000+cast(is_yandm as int)+1 as varchar2);
    end if;另外,不需要这样cast来cast去的,oracle会自动转换的.
      

  4.   


    is_yandm := cast(10000+cast(is_yandm as int)+1 as varchar2(5));改成
    SELECT cast(10000+cast(is_yandm as int)+1 as varchar2(5)) into is_yandm FROM DUAL;