Standaardwaarden worden alleen gebruikt als de argumenten niet zijn opgegeven. In jouw geval deed je dat specificeer de argumenten - beide zijn opgegeven, met de waarde NULL. (Ja, in dit geval wordt NULL als een echte waarde beschouwd :-). Probeer:
EXEC TEST()
Deel en geniet.
Aanvulling :De standaardwaarden voor procedureparameters zijn zeker ergens begraven in een systeemtabel (zie de SYS.ALL_ARGUMENTS
bekijken), maar om de standaardwaarde uit de weergave te halen, moet u tekst uit een LANG-veld extraheren, en dit zal waarschijnlijk pijnlijker blijken te zijn dan het waard is. De eenvoudige manier is om wat code aan de procedure toe te voegen:
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;