Les valeurs par défaut ne sont utilisées que si les arguments ne sont pas spécifiés. Dans votre cas, vous avez fait spécifiez les arguments - les deux ont été fournis, avec une valeur de NULL. (Oui, dans ce cas NULL est considéré comme une valeur réelle :-). Essayez :
EXEC TEST()
Partagez et profitez.
Avenant :Les valeurs par défaut des paramètres de procédure sont certainement enterrées dans une table système quelque part (voir le SYS.ALL_ARGUMENTS
view), mais obtenir la valeur par défaut de la vue implique d'extraire du texte d'un champ LONG, et va probablement s'avérer plus pénible que cela ne vaut. Le facile consiste à ajouter du code à la procédure :
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;