解决方案 »

  1.   

    函数需要有返回值的,你只有在if条件下才有返回值,如果不满足if条件就没有返回,这里会有错误的
      

  2.   

    CREATE OR REPLACE FUNCTION F_YTBSF(YYRYJF1   NUMBER,
                                       YYYWBZ2   NUMBER,
                                       YYZXGZJF3 NUMBER,
                                       YYQYFCJF4 NUMBER,
                                       YYJBJSZJ5 NUMBER,
                                       SJGY6     NUMBER,
                                       QTYT7     NUMBER) RETURN VARCHAR2 IS
      YTBSF VARCHAR2(32);
      M1    VARCHAR2(2);
      M2    VARCHAR2(2);
      M3    VARCHAR2(2);
      M4    VARCHAR2(2);
      M5    VARCHAR2(2);
      M6    VARCHAR2(2);
      M7    VARCHAR2(2);
    BEGIN
      IF YYRYJF1 <> 0 THEN
        M1 := '1,';
      ELSE
        M1 := ''; END IF;
        IF YYYWBZ2 <> 0 THEN
          M2 := '2,';
        ELSE
          M1 := ''; END IF;
          IF YYZXGZJF3 <> 0 THEN
            M3 := '3,';
          ELSE
            M1 := ''; END IF;
            IF YYQYFCJF4 <> 0 THEN
              M4 := '4,';
            ELSE
              M1 := ''; END IF;
              IF YYJBJSZJ5 <> 0 THEN
                M5 := '5,';
              ELSE
                M1 := ''; END IF;
                IF SJGY6 <> 0 THEN
                  M6 := '6,';
                ELSE
                  M1 := ''; END IF;
                  IF QTYT7 <> 0 THEN
                    M7 := '7,';
                  ELSE
                    M1    := ''; END IF;
                    YTBSF := M1 || M2 || M3 || M4 || M5 || M6 || M7;
                    IF MOD(LENgth(YTBSF), 2) = 0 THEN
                      RETURN(substr(YTBSF, LENgth(YTBSF) - 1));
                    ELSE
                      RETURN(YTBSF);
                    END IF;
                  END F_YTBSF;
      

  3.   

    IF YYRYJF1<>0 then M1:= '1,';   else M1:='' end IF ;IF条件里面的语句最后都有;
    else里面的语句没有;
    你觉得合适么?
      

  4.   

    问题很多啊。
    oracle中len对应的函数是length
    oracle截取字符串是substr
    还没有,你的每一句m1:=‘’后面都少一个;