要写一个oracle的自定义函数,外界传入一个日期,一个数值.返回一个数字create or replace function f_test
   (pdate in char,pctmoney in number) 
return number 
is
  rsum number:=0;
begin
     -- 日期小于2009-12-01 返回系数是0.05 否则系数是0.025
     if pdate < '2009-12-01' then
         
                select pctmoney * 0.05 into rsum  
                    
     else 
         
              select  pctmoney * 0.025 into rsum       
     end if   return(rsum)
end ;测试时提示出错,无效的描述对象:

解决方案 »

  1.   

    select 语句必须带from的,要么带具体的表名,要么带dual。建议修改如下:
    create or replace function f_test
      (pdate in char,pctmoney in number)
    return number
    is
      rsum number:=0;
    begin
        -- 日期小于2009-12-01 返回系数是0.05 否则系数是0.025
        if pdate < '2009-12-01' then
           
                    rsum := pctmoney * 0.05 
                       
        else
           
                   rsum := pctmoney * 0.025;
        end if  return(rsum)
    end ; 
      

  2.   


    真不习惯 end if 后面还得跟个分号  ; 
      

  3.   

    这样也可以。
    create or replace function f_test
      (pdate in char,pctmoney in number)
    return number
    is
      rsum number:=0;
    begin
        -- 日期小于2009-12-01 返回系数是0.05 否则系数是0.025
        if pdate < '2009-12-01' then
                  select pctmoney * 0.05 into rsum from dual;
        else
                  select  pctmoney * 0.025 into rsum from dual;
        end if;  return rsum;
      exception when others then
      raise;
    end ; 
    /
      

  4.   


    任何一句话后面都得有分号。包括最后的return。