We both ran this code on an 11.2 instance.
CREATE OR REPLACE PACKAGE pkg_test AS FUNCTION fv (i VARCHAR2) RETURN NUMBER; FUNCTION fn (i NUMBER) RETURN NUMBER; END; / CREATE OR REPLACE PACKAGE BODY pkg_test AS FUNCTION fv (i VARCHAR2) RETURN NUMBER IS BEGIN RETURN 1; END; FUNCTION fn (i NUMBER) RETURN NUMBER IS BEGIN RETURN 1; END; END; / CREATE OR REPLACE FUNCTION fv (i VARCHAR2) RETURN NUMBER IS BEGIN RETURN 1; END; / CREATE OR REPLACE FUNCTION fn (i NUMBER) RETURN NUMBER IS BEGIN RETURN 1; END; / /* No difference in PL/SQL "VC2 overloading" completed in: 2.5 seconds "Number overloading" completed in: 2.52 seconds "Schema-level VC2" completed in: 2.48 seconds "Schema-level Number" completed in: 2.49 seconds */ DECLARE l NUMBER; last_timing NUMBER := NULL; PROCEDURE start_timer IS BEGIN last_timing := DBMS_UTILITY.get_cpu_time; END; PROCEDURE show_elapsed_time (message_in IN VARCHAR2 := NULL) IS BEGIN DBMS_OUTPUT.put_line ( '"' || message_in || '" completed in: ' || (DBMS_UTILITY.get_cpu_time - last_timing) / 100 || ' seconds'); END; BEGIN start_timer; FOR indx IN 1 .. 10000000 LOOP l := pkg_test.fv (NULL); END LOOP; show_elapsed_time ('VC2 overloading'); -- start_timer; FOR indx IN 1 .. 10000000 LOOP l := pkg_test.fn (NULL); END LOOP; show_elapsed_time ('Number overloading'); -- start_timer; FOR indx IN 1 .. 10000000 LOOP l := fv (NULL); END LOOP; show_elapsed_time ('Schema-level VC2'); -- start_timer; FOR indx IN 1 .. 10000000 LOOP l := fv (NULL); END LOOP; show_elapsed_time ('Schema-level Number'); END; / /* Noticeable difference in SQL MAX(PKG_TEST.FV(NULL)) ---------------------- 1 1 row selected. Elapsed: 00:00:07.93 MAX(FV(NULL)) ------------- 1 1 row selected. Elapsed: 00:00:05.03 MAX(PKG_TEST.FN(NULL)) ---------------------- 1 1 row selected. Elapsed: 00:00:04.45 MAX(FN(NULL)) ------------- 1 1 row selected. Elapsed: 00:00:05.45 */ SET TIMING ON CREATE TABLE driver_table AS SELECT LEVEL id FROM DUAL CONNECT BY LEVEL < 1000000 / SELECT MAX (pkg_test.fv (NULL)) FROM driver_table / SELECT MAX (fv (NULL)) FROM driver_table / SELECT MAX (pkg_test.fn (NULL)) FROM driver_table / SELECT MAX (fn (NULL)) FROM driver_table / DROP driver_table / DROP package pkg_test / DROP FUNCTION fn / DROP FUNCTION fv /