I valori predefiniti vengono utilizzati solo se gli argomenti non sono specificati. Nel tuo caso l'hai fatto specificare gli argomenti:entrambi sono stati forniti, con un valore di NULL. (Sì, in questo caso NULL è considerato un valore reale :-). Prova:
EXEC TEST()
Condividi e divertiti.
Appendice :I valori predefiniti per i parametri della procedura sono certamente sepolti in una tabella di sistema da qualche parte (vedi SYS.ALL_ARGUMENTS
view), ma ottenere il valore predefinito dalla vista implica l'estrazione di testo da un campo LUNGO e probabilmente si rivelerà più doloroso di quanto non valga la pena. Il facile il modo è aggiungere del codice alla procedura:
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;