J'ai un stored procedure
comme suit.
CREATE OR REPLACE PROCEDURE TEST(X IN VARCHAR2 DEFAULT 'P',Y IN NUMBER DEFAULT 1) AS
BEGIN
DBMS_OUTPUT.PUT_LINE('X'|| X||'--'||'Y'||Y);
END;
Quand j'exécute la procédure ci-dessus
EXEC TEST(NULL,NULL);
Il imprimera X--Y
. Les paramètres d'entrée ne correspondent pas aux valeurs spécifiées dans la signature de procédure lorsque les paramètres d'entrée sont null
. Quelle est l'utilisation de default
valeurs alors? Que se passe-t-il si nous passons une valeur null
en entrée et si nous voulons remplacer une valeur null
par la valeur default
?
Les valeurs par défaut ne sont utilisées que si les arguments ne sont pas spécifiés. Dans votre cas, vous avez spécifié les arguments - les deux ont été fournis, avec la valeur NULL. (Oui, dans ce cas, NULL est considéré comme une valeur réelle :-). Essayer:
EXEC TEST()
Partager et profiter.
Addendum: Les valeurs par défaut pour les paramètres de procédure sont certainement enterrées quelque part dans une table système (voir le SYS.ALL_ARGUMENTS
vue), mais pour extraire la valeur par défaut de la vue, il faut extraire du texte d'un champ LONG et cela s'avérera probablement plus pénible qu'il ne vaut la peine. Le moyen simple 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;