When more than one program in the same scope share the same name, the programs are said to be overloaded. PL/SQL supports the overloading of procedures and functions in the declaration section of a block (named or anonymous), package specifications and bodies, and object type definitions. Overloading is a very powerful feature, and you should exploit it fully to improve the usability of your software.
Here is a very simple example of three overloaded modules defined in the declaration section of an anonymous block (therefore, all are local modules):
DECLARE /* First version takes a DATE parameter. */ FUNCTION value_ok (date_in IN DATE) RETURN BOOLEAN IS BEGIN RETURN date_in <= SYSDATE; END; /* Second version takes a NUMBER parameter. */ FUNCTION value_ok (number_in IN NUMBER) RETURN BOOLEAN IS BEGIN RETURN number_in > 0; END; /* Third version is a procedure! */ PROCEDURE value_ok (number_in IN NUMBER) IS BEGIN IF number_in > 0 THEN DBMS_OUTPUT.PUT_LINE (number_in || 'is OK!'); ELSE DBMS_OUTPUT.PUT_LINE (number_in || 'is not OK!'); END IF; END; BEGIN
When the PL/SQL runtime engine encounters the following statement:
IF value_ok (SYSDATE) THEN ...
the actual parameter list is compared with the formal parameter lists of the various overloaded modules, searching for a match. If one is found, PL/SQL executes the code in the body of the program with the matching header.
Another name for overloading is static polymorphism. The term polymorphism refers to the ability of ...