Стойностите по подразбиране се използват само ако аргументите не са посочени. Във вашия случай направихте посочете аргументите - и двата бяха предоставени със стойност NULL. (Да, в този случай NULL се счита за реална стойност :-). Опитайте:
EXEC TEST()
Споделяйте и се наслаждавайте.
Допълнение :Стойностите по подразбиране за параметрите на процедурата със сигурност са заровени някъде в системна таблица (вижте SYS.ALL_ARGUMENTS
изглед), но извличането на стойността по подразбиране от изгледа включва извличане на текст от поле LONG и вероятно ще се окаже по-болезнено, отколкото си струва. Лесно начинът е да добавите някакъв код към процедурата:
CREATE OR REPLACE PROCEDURE TEST(X IN VARCHAR2 DEFAULT 'P',
Y IN NUMBER DEFAULT 1)
AS
varX VARCHAR2(32767) := NVL(X, 'P');
varY NUMBER := NVL(Y, 1);
BEGIN
DBMS_OUTPUT.PUT_LINE('X=' || varX || ' -- ' || 'Y=' || varY);
END TEST;