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

Méthode de collecte :fonctions PRIOR et NEXT dans la base de données Oracle

Comme nous l'avons vu dans l'introduction aux méthodes de collecte PL/SQL, il existe 7 fonctions de collecte dans Oracle Database. Parmi ces sept fonctions, nous avons déjà appris les cinq premières méthodes. Prior et Next sont les deux dernières méthodes/fonctions de collecte PL/SQL qui restent encore à explorer.

Ainsi, dans le blog PL/SQL d'aujourd'hui, nous allons explorer en détail ces deux méthodes de collecte intactes.

Que sont les fonctions de collecte précédente et suivante ?

Il est toujours bon d'avoir quelques fonctions sous votre manche qui peuvent vous aider à naviguer dans le contenu de votre collection. La fonction Prior &Next pourrait être ces fonctions.

Ces deux fonctions prennent un index de la collection en entrée et renvoient le résultat.

Par exemple, la méthode de collecte PL/SQL PRIOR prend un index en entrée et renvoie la valeur stockée dans l'index le plus bas précédent. Alors que la méthode de collecte NEXT renvoie la valeur de l'indice supérieur suivant.

Les fonctions ou procédures de collecte Prior et Next sont-elles ?

Prior et Next sont des fonctions.

Pouvons-nous utiliser ces deux fonctions avec les trois types de collections ?

Oui, les fonctions de collecte Prior et Next peuvent être utilisées avec les trois types de collectes.

Quand les méthodes de collecte PL/SQL Prior et Next renverront-elles null ?

La méthode de collecte Prior renvoie null lorsqu'il n'y a pas de valeurs d'indice inférieures disponibles et la méthode de collecte Next renvoie null lorsqu'il n'y a pas de valeurs d'indice supérieures disponibles à renvoyer.

En termes simples, nous pouvons dire que ces deux fonctions de collection renvoient Null si elles sont utilisées respectivement avec les index First et Last d'une collection .

Quel sera le résultat de la méthode Collection Next et Prior si nous les utilisons avec un tableau associatif ?

Si les méthodes de collecte PRIOR et NEXT sont utilisées avec des tableaux associatifs, elles renverront une sortie de type de données VARCHAR2 ou LONG.

J'ai entendu dire que ces méthodes lèvent un certain type d'exception. Est-ce vrai ?

Oui c'est vrai. Si l'une de ces fonctions est appliquée à une table imbriquée non initialisée ou à un Varray, elle lève l'exception COLLECTION_IS_NULL.

Pouvez-vous nous montrer comment utiliser ces fonctions dans notre code ?

Bien sûr, pourquoi pas! Je vais vous montrer l'application des fonctions de collecte Prior et Next à l'aide d'un code très simple.

Exemple de méthode de collecte préalable.

Dans cette méthode, nous apprendrons à utiliser la méthode de collecte Prior avec Nested Table.

SET SERVEROUTPUT ON;
DECLARE
    TYPE my_nested_table IS
        TABLE OF NUMBER;
    var_nt   my_nested_table := my_nested_table(9,18,27,36,45,54,63,72,81,90);
BEGIN
        dbms_output.put_line('Index prior to index 3 is '||var_nt.PRIOR(3)); 
        dbms_output.put_line('Value before 3rd Index is '||var_nt(var_nt.PRIOR(3))); 
END;
/

Dans le bloc PL/SQL anonyme ci-dessus, nous avons deux instructions de sortie avec "Appel de fonction préalable". La première instruction de sortie renverra le numéro d'index avant le numéro d'index 3 qui contient une certaine valeur. Dans notre cas, l'index avant l'index numéro 3 est 2. Ainsi 2 sera la sortie de la première instruction de sortie.

Dans la deuxième instruction de sortie, nous avons appelé la fonction Prior et l'avons fournie comme entrée à l'objet de collection.

var_nt(var_nt.PRIOR(3)) 

Le moteur Oracle exécutera d'abord la fonction Collection Prior (appelons-la partie 1) et en utilisant le résultat de la partie 1, il exécutera ensuite l'objet de collection (appelons-le partie 2) et produira le résultat final qui sera 18 dans notre cas. Allez-y, copiez le code et essayez de vous exécuter.

Que se passera-t-il si nous supprimons l'index le plus bas précédent de la table imbriquée ?

Alors maintenant, la question est de savoir ce qui se passera si vous supprimez l'index le plus bas précédent qui est 2 dans notre code. Dans ce cas, le résultat ne sera certainement pas le même. La fonction Prior renvoie l'index le plus bas précédent. Mais cet index doit contenir une certaine valeur.

Essayez-le vous-même. Voici le code.

DECLARE
    TYPE my_nested_table IS
        TABLE OF NUMBER;
    var_nt   my_nested_table := my_nested_table(9,18,27,36,45,54,63,72,81,90);
BEGIN
        var_nt.DELETE(2);
        dbms_output.put_line('Index prior to index 3 is '||var_nt.PRIOR(3)); 
        dbms_output.put_line('Value before 3rd Index is '||var_nt(var_nt.PRIOR(3))); 
END;
/

Exemple de méthode de collecte Next.

Vous pouvez utiliser la méthode de collecte PL/SQL Next de la même manière que vous avez utilisé la fonction Prior dans le code ci-dessus. La méthode de collecte NEXT renvoie la valeur de l'index immédiatement supérieur. Voici l'exemple

DECLARE
    TYPE my_nested_table IS
        TABLE OF NUMBER;
    var_nt   my_nested_table := my_nested_table(9,18,27,36,45,54,63,72,81,90);
BEGIN
        dbms_output.put_line('Next Higher Index to index 3 is '||var_nt.NEXT(3)); 
        dbms_output.put_line('Value after 3rd Index is '||var_nt(var_nt.NEXT(3))); 
END;
/

Les deux exemples sont presque les mêmes, sauf l'appel de la fonction de collection. Dans la section d'exécution de ce bloc PL/SQL, nous avons à nouveau deux instructions de sortie. La première instruction de sortie renverra le prochain numéro d'index non vide tandis que la seconde renverra les données stockées dans cet index. Le fonctionnement de ces deux déclarations sera le même que celui dont nous avons discuté ci-dessus. Allez-y, copiez le code et voyez le résultat.

C'était le tutoriel détaillé sur la méthode de collecte PL/SQL Next et Prior. J'espère que vous avez apprécié la lecture et appris quelque chose de nouveau. Assurez-vous de partager ce blog sur vos médias sociaux. Pour partager ce blog sur votre Facebook, cliquez ici et pour Twitter, cliquez ici.

Merci et bonne journée !