Wartości domyślne są używane tylko wtedy, gdy argumenty nie są określone. W Twoim przypadku zrobiłeś podaj argumenty - oba zostały podane, z wartością NULL. (Tak, w tym przypadku NULL jest traktowane jako wartość rzeczywista :-). Wypróbuj:
EXEC TEST()
Dziel się i ciesz.
Uzupełnienie :Domyślne wartości parametrów procedury są z pewnością ukryte gdzieś w tabeli systemowej (zobacz SYS.ALL_ARGUMENTS
widoku), ale uzyskanie wartości domyślnej z widoku wymaga wyodrębnienia tekstu z pola LONG i prawdopodobnie okaże się bardziej bolesne niż jest to warte. Łatwe sposobem jest dodanie kodu do procedury:
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;