Turn on Compile-Time Warnings
ALTER SESSION SET PLSQL_WARNINGS = 'ENABLE:ALL'
A Package with Overloading
CREATE OR replace PACKAGE salespkg AUTHID DEFINER
IS
PROCEDURE calc_total (zone_in IN VARCHAR2);
PROCEDURE calc_total (reg_in IN VARCHAR2);
END salespkg;
CREATE OR replace PACKAGE BODY salespkg
IS
PROCEDURE calc_total (zone_in IN VARCHAR2)
IS
BEGIN DBMS_OUTPUT.PUT_LINE ('zone'); END;
PROCEDURE calc_total (reg_in IN VARCHAR2)
IS
BEGIN DBMS_OUTPUT.PUT_LINE ('region'); END;
END salespkg;
Will This Work?
BEGIN
salespkg.calc_total ('zone15');
END;
Get It To Work With Named Notation
BEGIN
salespkg.calc_total (zone_in => 'zone15');
END;
Create New Version of Package
CREATE OR replace PACKAGE salespkg AUTHID DEFINER
IS
PROCEDURE calc_total (reg_in IN CHAR);
PROCEDURE calc_total (reg_in IN VARCHAR2);
END salespkg;
The Package Body Compiles Too
CREATE OR replace PACKAGE BODY salespkg
IS
PROCEDURE calc_total (reg_in IN CHAR)
IS
BEGIN DBMS_OUTPUT.PUT_LINE ('region'); END;
PROCEDURE calc_total (reg_in IN VARCHAR2)
IS
BEGIN DBMS_OUTPUT.PUT_LINE ('region'); END;
END salespkg;
Just Pass a String?
BEGIN
salespkg.calc_total ('reg11');
END;
Use Named Notation?
BEGIN
salespkg.calc_total (reg_in => 'reg11');
END;
Pass a Fixed Length String Explicitly?
DECLARE
l_char CHAR (2) := 'ab';
BEGIN
salespkg.calc_total (reg_in => l_char);
END;
Ambiguous Overloading Due to Default Values
CREATE OR replace PACKAGE salespkg AUTHID DEFINER
IS
PROCEDURE calc_total (zone_in IN CHAR, date_in in DATE DEFAULT SYSDATE);
PROCEDURE calc_total (zone_in IN VARCHAR2);
END salespkg;
CREATE OR replace PACKAGE BODY salespkg
IS
PROCEDURE calc_total (zone_in IN CHAR, date_in in DATE DEFAULT SYSDATE)
IS
BEGIN DBMS_OUTPUT.PUT_LINE ('zone with date'); END;
PROCEDURE calc_total (zone_in IN VARCHAR2)
IS
BEGIN DBMS_OUTPUT.PUT_LINE ('zone'); END;
END salespkg;
Oh No! Still Ambiguous....
BEGIN
salespkg.calc_total ('reg11');
END;
Ah, This One Works
BEGIN
salespkg.calc_total ('reg11', sysdate);
END;