今天学习了一下pl/sql语句,也用pl/sql dev来做一些函数,但不知道如何用语句调试函数。在pl/sql dev的test窗口下边的参数列表中已经为输入参数设置值,再通过F9调试运行,结果执行的结果都是函数异常后返回的值50。
请教:如何用语句调试函数?
如何在pl/sql dev的test窗口中调试函数?附函数代码:
create or replace function get_Sum_FSAL004(v_tableName in varchar2,v_FbegCmpPrd in varchar2,v_FendCmpPrd in varchar2) return number
is
    result number;
    sql_str varchar2(2000);
begin
  begin
      sql_str:='select sum(FSAL004) from '||v_tableName||' a left join T_HR_CMPPERIOD b on a.FPeriod=b.Fid'||
                     'where b.FNumber between '||v_FbegCmpPrd||' and '||v_FendCmpPrd;
                     dbms_output.put_line(sql_str);
      execute immediate sql_str into result;
      exception when others then
        result:=50;
  end;
  return result;
  exception when others then
    raise_application_error('-20001','Error:get_Sum_FSAL004!');
end;需要输入的参数为:"T_temp_2898","201001","201002".

解决方案 »

  1.   


    --我一般复杂的函数都是改写成过程来调试的,
    --改成过程很简单,只需要去点返回值return 等就可以了
    create or replace procedure get_Sum_FSAL004(v_tableName in varchar2,v_FbegCmpPrd in varchar2,v_FendCmpPrd in varchar2) 
    --return number
    is
        result number;
        sql_str varchar2(2000);
    begin
      begin
          sql_str:='select sum(FSAL004) from '||v_tableName||' a left join T_HR_CMPPERIOD b on a.FPeriod=b.Fid'||
                         'where b.FNumber between '||v_FbegCmpPrd||' and '||v_FendCmpPrd;
                         dbms_output.put_line(sql_str);
          execute immediate sql_str into result;
          exception when others then
            result:=50;
      end;
      --return result;
      exception when others then
        raise_application_error('-20001','Error:get_Sum_FSAL004!');
    end;
      

  2.   

    好像你的拼接语句中 where前面应该是少了个空格
      

  3.   

    嗯,谢谢gelyon同学!这是你之前的代码,我改成我实际的东西了。但刚用pl/sql,也刚学了点语句,看怎么调试,一直都试不通。我有点疑问,where 前面为什么要用连接符||呢??是不是换行了就需要?
     
      

  4.   

     你把where前面加个空格
    paddy用||把where断开可能是为了格式好看些
      

  5.   

    哈哈,果然是where 句子之前没有空格导致的。加上空格后使用pl/sql dev就可以按句调试了!!!数据正确,非常感谢gelyon及其它朋友!
    我结贴先哦,给分给gelyon