function get_ybdatabydayandjgbm(
            ijgbm varchar2,   --机构编码
            iday  varchar2,   --日期
            icolumname varchar2 --列名称
   ) return number as icolumvalue NUMBER;
   v_sql varchar2(5000);
   begin
        v_sql:='select '|| icolumname || 'into icolumvalue  from Z_GBJX_YXRZ_MAIN t where  t.dwbm = '''|| ijgbm ||''' and to_char(t.zbjssj1,''yyyy-mm-dd'') =syc.get_day('|| iday||') ' ;
       DBMS_OUTPUT.PUT_LINE( v_SQL);
       return icolumvalue;
   end;为什么没有返回值?应该有返回值的啊? 请高手指点

解决方案 »

  1.   

    你拼接的SQL没有执行,怎么有返回值?
    也没有给icolumvalue赋值,怎么会有返回值?
      

  2.   

    --试试这个
    FUNCTION get_ybdatabydayandjgbm(ijgbm      VARCHAR2, --机构编码
                                    iday       VARCHAR2, --日期
                                    icolumname VARCHAR2 --列名称
                                    ) RETURN NUMBER AS
      icolumvalue NUMBER;
      v_sql       VARCHAR2(5000);
    BEGIN
      v_sql := 'select ' || icolumname ||
               ' from Z_GBJX_YXRZ_MAIN t where t.dwbm = ''' ||
               ijgbm ||
               ''' and to_char(t.zbjssj1,''yyyy-mm-dd'') =syc.get_day(' || iday || ') ';
      --动态执行
      EXECUTE IMMEDIATE v_sql
        INTO icolumvalue;
      DBMS_OUTPUT.PUT_LINE(v_SQL);
      RETURN icolumvalue;
    END;
    /
      

  3.   

    因为函数具有返回值,所以调用函数是作为一个表达式的一部分,而不能像调用存储过程一样作文一个独立的语句调用。如,你可以放在pl/sql语句块里面:
    DECLARE
    res NUMBER:=0  --用来保存返回值班
    BEGIN
    res;=get_ybdatabydayandjgbm(参数); --表达式得到返回值
    dbms_output.put_line(res);  --输出结果
    END
      

  4.   

    问题解决!谢谢各位,尤其
    tangren
     
    (老兵新手)