下面是一个函数,参数有个默认值:
CREATE OR REPLACE FUNCTION FC_TEST(EXDATESTART IN VARCHAR2:='0000-00-00',exdateend in VARCHAR2:='0000-00-00')
RETURN VARCHAR2 AS
BEGIN
 --RETURN EXDATESTART;
  IF EXDATESTART='0000-00-00' THEN
    RETURN 'TEST';
  END IF;
  RETURN 'ERROR';
END;
下面是调用函数:
declare
begin
DBMS_OUTPUT.PUT_LINE(FC_test());
end;
如果我调用DBMS_OUTPUT.PUT_LINE(FC_test('','')),结果出来的是'ERROR'(奇怪的是我昨天这样调用是没有问题的)。我希望传一个空的参数给EXDATESTART,让他使用默认值,但如果调用DBMS_OUTPUT.PUT_LINE(FC_test(,''))又是不合法的,该怎么办?

解决方案 »

  1.   

    11:45:42 jlanzpa817>CREATE OR REPLACE FUNCTION FC_TEST
    11:46:32   2  (EXDATESTART IN VARCHAR2:='0000-00-00',
    11:46:32   3   exdateend in VARCHAR2:='0000-00-00'
    11:46:32   4  )
    11:46:32   5  RETURN VARCHAR2 AS
    11:46:32   6  BEGIN
    11:46:32   7   --RETURN EXDATESTART;
    11:46:32   8    IF EXDATESTART='0000-00-00' THEN
    11:46:32   9      RETURN 'TEST';
    11:46:32  10    END IF;
    11:46:32  11    RETURN 'ERROR';
    11:46:32  12  END;
    11:46:32  13  /函数已创建。11:47:58 jlanzpa817>declare
    11:48:01   2  begin
    11:48:01   3  DBMS_OUTPUT.PUT_LINE(FC_test());
    11:48:01   4  end;
    11:48:01   5  /
    TESTPL/SQL 过程已成功完成。已用时间:  00: 00: 00.11
    11:48:03 jlanzpa817>
      

  2.   

    为什么要这样:FC_test('','')
    FC_test()不行吗?
      

  3.   

    如果我想传递第二个参数呢,FC_test()就不行了。
      

  4.   

    用位置标识法输入参数
    SQL> declare
      2    begin
      3    DBMS_OUTPUT.PUT_LINE(fc_test(exdateend =>'ff'));
      4    end;
      5  /
    TESTPL/SQL procedure successfully completed