I have package:
create or replace PACKAGE overload_pkg IS
PROCEDURE what_am_i (p_x IN VARCHAR2);
PROCEDURE what_am_i (p_x IN NUMBER);
PROCEDURE what_am_i (p_x IN DATE);
END overload_pkg;
and body:
create or replace PACKAGE BODY overload_pkg IS
PROCEDURE what_am_i (p_x IN VARCHAR2) IS
BEGIN
pri('Here I am, a VARCHAR2');
END what_am_i;
PROCEDURE what_am_i (p_x IN NUMBER) IS
BEGIN
pri('Here I am, a NUMBER');
END what_am_i;
PROCEDURE what_am_i (p_x IN DATE) IS
BEGIN
pri('Here I am, a DATE');
END what_am_i;
END overload_pkg;
Yet, when I call package PROCEDUREs:
BEGIN
overload_pkg.what_am_i('varchar2');
overload_pkg.what_am_i(1234);
overload_pkg.what_am_i('2018-04-06');
END;
, or any other date format I could think of, Oracle thinks it is either a VARCHAR or a NUMBER. Output:
Here I am, a VARCHAR2
Here I am, a NUMBER
Here I am, a VARCHAR2
Statement processed.
The only thing that worked was...
BEGIN
overload_pkg.what_am_i('varchar2');
overload_pkg.what_am_i(1234);
overload_pkg.what_am_i(to_DATE('08-APR-2018', 'DD-MON-YYYY'));
END;
But I thought Oracle recognized dates, given that it does implicit conversions. I am confused.
Thanks in advance.