Os valores padrão são usados apenas se os argumentos não forem especificados. No seu caso, você fez especifique os argumentos - ambos foram fornecidos, com um valor NULL. (Sim, neste caso NULL é considerado um valor real :-). Tentar:
EXEC TEST()
Compartilhe e curta.
Adendo :Os valores padrão para os parâmetros do procedimento estão certamente enterrados em uma tabela do sistema em algum lugar (veja o
SYS.ALL_ARGUMENTS
view), mas obter o valor padrão da view envolve extrair texto de um campo LONG e provavelmente será mais doloroso do que vale a pena. O fácil maneira é adicionar algum código ao procedimento: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;