Oracle
 sql >> Base de données >  >> RDS >> Oracle

Notation d'appel pour les sous-routines PL/SQL dans la base de données Oracle

Étant donné que les quelques tutoriels précédents portaient sur les sous-routines PL/SQL telles que les fonctions PL/SQL et les procédures stockées, il devient donc obligatoire de parler de leurs notations d'appel. L'apprentissage des concepts des sous-programmes PL/SQL ne sera pas considéré comme complet tant que nous n'aurons pas également appris leurs notations d'appel.

Qu'est-ce que la notation d'appel pour les sous-routines PL/SQL ?

La notation d'appel est un moyen de fournir des valeurs aux paramètres d'une sous-routine telle qu'une fonction PL/SQL ou une procédure stockée.

Types de notations d'appel pour les sous-programmes

Dans Oracle PL/SQL, il existe 3 types de notations d'appel. Ce sont :

  1. Notation de position
  2. Notation nommée et
  3. Notation d'appel mixte

Notations d'appel positionnel

La notation positionnelle est la notation d'appel la plus courante que vous pouvez voir dans presque tous les langages de programmation informatique. En notation positionnelle, nous devons spécifier la valeur de chaque paramètre formel de manière séquentielle. Cela signifie que vous devez fournir les valeurs des paramètres formels dans le même ordre qu'ils ont été déclarés dans la procédure ou dans la fonction.

En notation positionnelle, le type de données et la position du paramètre réel doivent correspondre au paramètre formel.

Lecture suggérée :paramètres réels par rapport aux paramètres formels

Exemple :notation positionnelle pour appeler des sous-routines PL/SQL.

CREATE OR REPLACE PROCEDURE emp_sal
(dep_id NUMBER, sal_raise NUMBER) 
IS
BEGIN
  	UPDATE employees 
SET salary = salary * sal_raise 
WHERE department_id = dep_id;
  
DBMS_OUTPUT.PUT_LINE ('salary updated successfully');
END;
 /

C'est le même exemple que nous avons fait dans le didacticiel PL/SQL 42 sur la façon de créer une procédure stockée avec des paramètres, mais avec quelques modifications mineures. Maintenant, si nous utilisons la notation d'appel positionnelle, nous devons fournir les valeurs aux deux paramètres de la procédure ci-dessus de la même manière dont ils sont déclarés.

Appel de procédure stockée utilisant la notation positionnelle dans Oracle Database

EXECUTE emp_sal(40,2);

Dans cet appel de procédure simple, la valeur 40 correspond au paramètre formel dep_id et la valeur 2 correspond au paramètre sal_raise.

Notations d'appel nommé

La notation d'appel nommée vous permet de transmettre des valeurs aux paramètres formels en utilisant leurs noms. Cela vous permettra à son tour d'attribuer des valeurs uniquement aux paramètres requis ou obligatoires.

Cette notation d'appel est utile lorsque vous avez un sous-programme avec des paramètres où certains de ces paramètres sont obligatoires et d'autres facultatifs et que vous souhaitez transmettre les valeurs uniquement aux paramètres obligatoires.

Opérateur d'association

Afin d'attribuer des valeurs aux paramètres formels en utilisant leurs noms, nous utilisons l'opérateur d'association. C'est une combinaison du signe égal à (=) et du signe supérieur à (>). Nous écrivons le nom du paramètre formel à gauche de l'opérateur et la valeur que vous souhaitez attribuer à droite de l'opérateur.

Exemple de notation d'appel nommé pour appeler une sous-routine PL/SQL

CREATE OR REPLACE FUNCTION add_num
(var_1 NUMBER, var_2 NUMBER DEFAULT 0, var_3 NUMBER ) RETURN NUMBER 
IS
BEGIN
  RETURN var_1 + var_2 + var_3;
END;
/

La fonction ci-dessus a 3 paramètres. Parmi ces 3 paramètres 2 sont obligatoires et 1 est facultatif avec une valeur par défaut 0.

Vous pouvez appeler cette fonction en utilisant la notation positionnelle. Mais il y a une restriction que vous devez respecter et c'est que vous devez fournir des valeurs à tous les paramètres formels dans le même ordre dans lequel ils sont déclarés et le type de données des paramètres formels et réels doit correspondre.

Donc, si vous souhaitez omettre le paramètre optionnel et souhaitez utiliser leur valeur par défaut ou si vous avez simplement oublié l'ordre du paramètre dans lequel ils ont été déclarés ! Ensuite, il vous sera un peu difficile d'appeler le sous-programme ci-dessus en utilisant la notation positionnelle. Dans un tel scénario, vous pouvez tirer parti de la notation d'appel nommée. Cette notation d'appel vous fournira la flexibilité souhaitée dans l'appel de vos sous-programmes.

Appel de fonction PL/SQL à l'aide de la notation d'appel nommée dans la base de données Oracle

DECLARE
  var_result  NUMBER;
BEGIN
  var_result := add_num(var_3 => 5, var_1 =>2);
  DBMS_OUTPUT.put_line('Result ->' || var_result);
END;

J'ai expliqué en détail l'appel de la fonction PL/SQL dans le didacticiel vidéo sur ce même sujet sur ma chaîne YouTube.

Notation d'appel mixte pour l'appel de sous-routines PL/SQL

Comme son nom l'indique dans la notation d'appel mixte, vous pouvez appeler des sous-programmes en utilisant la combinaison de notations d'appel nommées et positionnelles. La notation d'appel mixte est très utile lorsque la liste de paramètres est définie avec tous les paramètres obligatoires en premier et les paramètres facultatifs ensuite.

Exemple de notation d'appel mixte pour l'appel de sous-routines PL/SQL

Voici le bloc anonyme dans lequel nous appelons la même fonction add_num() que nous avons codée lors de la notation d'appel nommée.

DECLARE
  var_result  NUMBER;
BEGIN
  var_result := add_num(var_1 => 10, 30 ,var_3 =>19);
  DBMS_OUTPUT.put_line('Result ->' || var_result);
END;

C'est ainsi que nous utilisons la notation d'appel mixte pour appeler les sous-routines PL/SQL.

Essayez vous-même

En utilisant les connaissances des concepts ci-dessus, essayez de résoudre la question suivante :

Écrivez une fonction PL/SQL avec des paramètres pour échanger deux nombres et appelez cette fonction en utilisant la notation d'appel mixte.

Vous pouvez partager votre code ou l'instantané de votre code avec moi sur mes réseaux sociaux [Twitter // Facebook].

J'espère que vous avez apprécié la lecture. Assurez-vous d'aimer et de partager ce blog. Merci et bonne journée.