web-dev-qa-db-fra.com

Valeurs par défaut de la procédure stockée dans Oracle

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?

26
user1118468

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;
50
Bob Jarvis