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

Méthodes de collecte :fonctions FIRST et LAST dans la base de données Oracle

Bienvenue à nouveau dans la série sur les méthodes de collecte dans Oracle Database. Jusqu'à présent, dans cette série, nous avons couvert Collection Function Count ( ) et Collection Function Exist ( ). J'espère que vous avez apprécié la lecture. Aujourd'hui, dans ce tutoriel PL/SQL, nous allons apprendre les méthodes de collecte First ( ) et Last ( ).

Quelles sont les méthodes de collecte PREMIER ( ) et DERNIER ( ) ?

Nous utilisons les fonctions de collection First &Last pour connaître les première et dernière valeurs d'index définies dans une collection.

Pouvons-nous utiliser ces méthodes de collecte avec n'importe quel type de collecte ?

Oui! Vous pouvez utiliser ces deux fonctions avec les trois types de collections que sont les tableaux associatifs, les tables imbriquées et les VARRAY.

Quand les méthodes de collecte FIRST ( ) et LAST ( ) renvoient-elles null ?

Les deux fonctions renvoient null lorsqu'elles sont appliquées à une collection vide ou lorsqu'elles sont appliquées à une collection d'initialisation qui n'a aucun élément.

Pouvez-vous énumérer la spécification de la fonction pour ces deux fonctions ?

Bien sûr! Pourquoi pas. La spécification de la fonction de collecte FIRST ( ) est :

FUNCTION FIRST RETURN PLS_INTEGER | VARCHAR2

Et la spécification de fonction pour la fonction de collecte LAST ( ) est :

FUNCTION LAST RETURN PLS_INTEGER | VARCHAR2

Information :
Pour les tableaux associatifs indexés par des chaînes, ces méthodes renvoient des chaînes ; "le plus bas" et "le plus haut" sont déterminés par l'ordre du jeu de caractères utilisé dans cette session.

Et s'il n'y a qu'un seul élément dans mon VARRAY ?

Dans ce cas, la fonction de collecte FIRST ( ) est toujours 1 et la méthode de collecte DERNIER ( ) est toujours égale à COUNT.

Et si j'appliquais ces fonctions à une collection non initialisée ?

Je veux dire sérieusement, pourquoi le feriez-vous ! Quoi qu'il en soit, si vous appliquez la fonction de collecte FIRST &LAST à une collection non initialisée, l'exception COLLECTION_IS_NULL sera déclenchée.

Exemple :Comment utiliser la fonction de collecte PREMIER et DERNIER avec la collecte ?

SET SERVEROUTPUT ON;
DECLARE
    TYPE nt_tab IS TABLE OF NUMBER;
    col_var nt_tab := nt_tab(10, 20, 30, 40, 50);
BEGIN
    DBMS_OUTPUT.PUT_LINE ('First Index of the Nested table is ' || col_var.FIRST);
    DBMS_OUTPUT.PUT_LINE ('Last Index of the Nested table is ' || col_var.LAST);
END;
/

Dans l'exemple ci-dessus, nous avons créé une table imbriquée avec le nom NT_TAB et l'avons initialisée à l'aide de la variable de collection col_var. Cette table imbriquée a 5 index dans lesquels nous avons stocké les valeurs. L'index le plus bas dans cette table imbriquée est 1 qui contient la valeur 10 et l'index maximum est 5 avec la valeur 50. Ainsi, lors de l'exécution, le résultat de la première instruction DBMS_OUTPUT sera 1 et de la deuxième instruction DBMS_OUTPUT sera 5.

Allez-y, copiez le code et vérifiez vous-même le résultat.

Et si nous supprimions le premier élément du tableau imbriqué ? Quelle sera alors la sortie de la fonction de collecte FIRST ?

C'est une très bonne question ! Si vous supprimez le premier élément de la fonction de collecte, la fonction de collecte FIRST renverra l'indice supérieur à 1 et contenant des données. Voyons l'exemple :

SET SERVEROUTPUT ON;
DECLARE
    TYPE nt_tab IS TABLE OF NUMBER;
    col_var nt_tab := nt_tab(10, 20, 30, 40, 50);
BEGIN
col_var.DELETE(1);
    DBMS_OUTPUT.PUT_LINE ('First Index after DELETE is ' || col_var.FIRST);
END;
/

Dans l'exemple ci-dessus, nous avons supprimé le premier élément de la table imbriquée nt_tab à l'aide de la méthode de collecte DELETE. Après avoir supprimé le premier élément qui est 10 sur l'index 1, le nouvel indice le plus bas est maintenant 2 qui contient des données stockées. Ainsi à l'exécution le résultat sera 2.

Et si je supprime l'élément du milieu de la collection ?

Si vous supprimez les données du milieu, la fonction de collecte LAST renverra une valeur supérieure à la valeur renvoyée par la méthode COUNT.

Pouvons-nous voir les données stockées dans les index de la collection en utilisant les méthodes de collecte FIRST et LAST ?

Alors que j'expliquais ce même concept dans une classe, une étudiante a levé la main et m'a demandé.

Monsieur, jusqu'à présent, nous voyons que ces fonctions renvoient le numéro d'index de la collection. Et si nous voulons voir les données stockées dans ces index. Existe-t-il un moyen de voir les données stockées dans l'index en utilisant ces méthodes de collecte EN PREMIER ET EN DERNIER ?

La réponse à cette question est, oui ! Bien sûr . Avec le numéro d'indice, vous pouvez utiliser ces fonctions pour voir les données stockées dans l'index le plus bas et le plus haut de la collection.

Par exemple

SET SERVEROUTPUT ON;
DECLARE
    TYPE nt_tab IS TABLE OF NUMBER;
    col_var nt_tab := nt_tab(10, 20, 30, 40, 50);
BEGIN
    -- This output statement will return 10 which is the value stored at the first index
    DBMS_OUTPUT.PUT_LINE ('Value stored at First Index is ' || col_var(col_var.FIRST));
    -- This output statement will return 50 which is the value stored at the last index
    DBMS_OUTPUT.PUT_LINE ('Value stored at First Index is ' || col_var(col_var.LAST));
END;
/

Afin de voir les données stockées dans le premier et le dernier index, il vous suffit de placer les appels de fonction de ces fonctions entre les parenthèses de la variable de collection qui est col_var comme nous l'avons fait dans l'exemple ci-dessus.

Maintenant, la question est et si nous COUPONS la collection ? Quelle sera alors la sortie de la fonction de collecte LAST ? Allez-y et regardez le didacticiel vidéo où j'ai expliqué quelle sera la sortie de la méthode de collecte LAST lorsque vous découpez la collection à l'aide de l'exemple.

C'est tout à propos de ces méthodes de collecte. J'espère que vous avez trouvé ce blog utile. Merci et bonne journée !