/*
========================================================================
  テストパッケージ仕様
========================================================================
*/
create or replace package test is
  function Test1(p1 in varchar2) return varchar2;
  function Test1(p1 in number) return varchar2;
  function Test1(p1 in date) return varchar2;
  function Test1(p1 in varchar2, p2 in varchar2) return number;
  procedure Test1(p1 in varchar2);
end;
/

/*
========================================================================
  テストパッケージ本体
========================================================================
*/
create or replace package body test is

  /*
  ======================================================================
    テスト共通ファンクション
  ======================================================================
  */
  function Test0(p1 in varchar2, p2 in varchar2) return varchar2 is
  begin 
    dbms_output.put_line('para1 = ' || p1);
    dbms_output.put_line('para1 = ' || p2);
    return p1 || p2;
  end; 

  /*
  ======================================================================
    テスト1 ファンクション - 1
  ======================================================================
  */
  function Test1(p1 in varchar2) return varchar2 is
  begin 
    dbms_output.put_line('Test1 - 1 varchar2 実行');
    return Test0(p1, '');
  end; 

  /*
  ======================================================================
    テスト1 ファンクション - 2
  ======================================================================
  */
  function Test1(p1 in number) return varchar2 is
  begin 
    dbms_output.put_line('Test1 - 2 number 実行');
    return Test0(to_char(p1), '');
  end; 

  /*
  ======================================================================
    テスト1 ファンクション - 3
  ======================================================================
  */
  function Test1(p1 in date) return varchar2 is
  begin 
    dbms_output.put_line('Test1 - 3 date 実行');
    return Test0(to_char(p1, 'yyyy.mm.dd'), '');
  end; 

  /*
  ======================================================================
    テスト1 ファンクション - 4
  ======================================================================
  */
  function Test1(p1 in varchar2, p2 in varchar2) return number is
  begin 
    dbms_output.put_line('Test1 - 4 varchar2 実行');
    return to_number(Test0(p1, p2));
  end; 

  /*
  ======================================================================
    テスト1 プロシジャ - 5
  ======================================================================
  */
  procedure Test1(p1 in varchar2) is
    a  varchar2(2000);
  begin 
    dbms_output.put_line('Test1 - 5 varchar2 実行');
    a := Test0(p1, '');
  end; 

end;
/

■オーバーロード処理テスト

-- Test1 - 1 varchar2 テスト
set serveroutput on;
variable rcd varchar2(200);
execute :rcd := test.test1('aaa');
print rcd;

-- Test1 - 2 number テスト
set serveroutput on;
variable rcd varchar2(200);
execute :rcd := test.test1(100);
print rcd;

-- Test1 - 3 date テスト
set serveroutput on;
variable rcd varchar2(200);
execute :rcd := test.test1(sysdate);
print rcd;

-- Test1 - 4 varchar2 テスト
set serveroutput on;
variable rcd varchar2(200);
execute :rcd := test.test1('123', '456');
print rcd;

-- Test1 - 5 varchar2 テスト
set serveroutput on;
execute test.test1('123');