パッケージのヘッダー部に同一名のプロシージャ、ファンクションをパラメータを変えて複数定義する事で実現できます。
ヘッダー部
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;

