パッケージのヘッダー部に同一名のプロシージャ、ファンクションをパラメータを変えて複数定義する事で実現できます。
ヘッダー部
CREATE OR REPLACE PACKAGE SCOTT."PAC01" IS PROCEDURE PRC_OLTEST (P_NAME IN VARCHAR2); PROCEDURE PRC_OLTEST (P_NAME IN VARCHAR2,P_NO IN NUMBER); PROCEDURE PRC_OLTEST (P_NAME IN VARCHAR2,P_NO IN NUMBER,P_RCODE OUT NUMBER) ; FUNCTION FNC_OLTEST (P_NO IN NUMBER ) RETURN VARCHAR2; FUNCTION FNC_OLTEST (P_NO IN VARCHAR2) RETURN NUMBER; FUNCTION FNC_OLTEST (P_NO IN NUMBER ,P_NAME IN VARCHAR2 ) RETURN NUMBER; END; /
ボディ部
CREATE OR REPLACE PACKAGE BODY SCOTT."PAC01" AS PROCEDURE PRC_OLTEST ( P_NAME IN VARCHAR2 ) IS vPRC_NAME CONSTANT VARCHAR2(80) := 'PRC_OLTEST(P_NAME IN VARCHAR2)'; BEGIN DBMS_OUTPUT.PUT_LINE('実行プロシージャ:'||vPRC_NAME); DBMS_OUTPUT.PUT_LINE('P_NAME IN :'||P_NAME); END PRC_OLTEST; /* * */ PROCEDURE PRC_OLTEST ( P_NAME IN VARCHAR2 ,P_NO IN NUMBER ) IS vPRC_NAME CONSTANT VARCHAR2(80) := 'PRC_OLTEST(P_NAME IN VARCHAR2,P_NO IN NUMBER)'; BEGIN DBMS_OUTPUT.PUT_LINE('実行プロシージャ:'||vPRC_NAME); DBMS_OUTPUT.PUT_LINE('P_NAME IN :'||P_NAME); DBMS_OUTPUT.PUT_LINE('P_NO IN :'||to_char(P_NO)); END PRC_OLTEST; /* * */ PROCEDURE PRC_OLTEST ( P_NAME IN VARCHAR2 ,P_NO IN NUMBER ,P_RCODE OUT NUMBER ) IS vPRC_NAME CONSTANT VARCHAR2(80) := 'PRC_OLTEST(P_NAME IN VARCHAR2,P_NO IN NUMBER,P_RCODE OUT NUMBER)'; vRCODE NUMBER; BEGIN DBMS_OUTPUT.PUT_LINE('実行プロシージャ:'||vPRC_NAME); DBMS_OUTPUT.PUT_LINE('P_NAME IN :'||P_NAME); DBMS_OUTPUT.PUT_LINE('P_NO IN :'||to_char(P_NO)); vRCODE := P_NO * P_NO; DBMS_OUTPUT.PUT_LINE('P_RCODE OUT :'||to_char(vRCODE)); END PRC_OLTEST; /* * */ FUNCTION FNC_OLTEST ( P_NO IN NUMBER ) RETURN VARCHAR2 is rdate EX01.C2%TYPE; BEGIN select c2 into rdate from ex01 where c1 = P_NO; return rdate; END; /* * */ FUNCTION FNC_OLTEST ( P_NO IN VARCHAR2 ) RETURN NUMBER is rdate EX01.C1%TYPE; BEGIN select c1 into rdate from ex01 where c2 = P_NO; return rdate; END; /* * */ FUNCTION FNC_OLTEST ( P_NO IN NUMBER ,P_NAME IN VARCHAR2 ) RETURN NUMBER is rdate EX01.C3%TYPE; BEGIN select c3 into rdate from ex01 where c1 = P_NO and c2 = P_NAME; return rdate; END; END PAC01;
実行結果
-- ファンクションの実行 select PAC01.FNC_OLTEST(1) from dual ; select PAC01.FNC_OLTEST('みかん') code from dual ; select PAC01.FNC_OLTEST(1,'みかん') price from dual ; -- プロシージャの実行 exec PAC01.PRC_OLTEST('テスト1') ; exec PAC01.PRC_OLTEST('テスト2',60) ; -- OUTパラメータの場合は無名ブロックで呼び出さないといけません declare vRCODE number; begin PAC01.PRC_OLTEST('テスト3',45,vRCODE); DBMS_OUTPUT.PUT_LINE('vRCODE :'||to_char(vRCODE)); end;