提示错误Error(29,129): PLS-00103: Encountered the symbol "(" when expecting one of the following:     ) varying large create or replace PROCEDURE sp_hw_BCCreate8ByteString
(
    v_psInputStr   CHAR ,
    v_psFieldStr   CHAR ,
    v_psOutputStr OUT     CHAR, 
    piReturnCode  OUT   INTEGER
)AS 
    l_error      CHAR( 5) := '00000';
    v_iLoop      INTEGER ;
    v_sChar      CHAR( 1);
    v_sCharInField CHAR( 1);
BEGIN 
    v_psOutputStr := '00000000';
    v_iLoop      := 1;
    WHILE v_iLoop <= 8 LOOP 
        v_sChar      := SUBSTR(v_psInputStr,v_iLoop,1);
        v_sCharInField := SUBSTR(v_psFieldStr,v_iLoop,1);
        IF ( v_sChar = '?' ) THEN 
            v_sChar      := v_sCharInField;
        ELSE
            IF ( v_sChar <> '0' AND v_sChar <> '1' ) THEN
                piReturnCode := -1;
                RETURN ;--warning:oracle procedure can't return a value -1;
            END IF ;
        END IF ;
        v_psOutputStr := CAST(CONCAT(CONCAT(SUBSTR(v_psOutputStr,1,v_iLoop),v_sChar),SUBSTR(v_psOutputStr,v_iLoop+1+1)) AS  CHAR( 9));
        v_iLoop      := v_iLoop + 1;
    END LOOP ;
    
    piReturnCode := 0;
    RETURN ;--warning:oracle procedure can't return a value (0);
END  sp_hw_BCCreate8ByteString ; 

解决方案 »

  1.   

    编译器提示的是cast语句错误,和return没关系吧
      

  2.   

     CHAR( 9)  改成char(9)  你试一下  我用PL/SQL帮你调试了一下
      

  3.   

    经编译测试
    v_psOutputStr := CAST(CONCAT(CONCAT(SUBSTR(v_psOutputStr,1,v_iLoop),v_sChar),SUBSTR(v_psOutputStr,v_iLoop+1+1)) AS  CHAR( 9)); ====>select CAST(CONCAT(CONCAT(SUBSTR(v_psOutputStr,1,v_iLoop),v_sChar),SUBSTR(v_psOutputStr,v_iLoop+1+1)) AS  CHAR( 9))
      into v_psOutputStr
      from dual;
      

  4.   

    cast似乎不是pl-sql而是sql引擎中的东东,所以要用select into 赋值给变量
      

  5.   

    我调试的是oracle的语句,用你说的方法还是不行
      

  6.   

    用你说这个方法可以,弱弱的问,from dual是啥意思?
      

  7.   

    用你说这个方法可以,弱弱的问,from dual是啥意思?