BULK COLLECT réduit les changements de contexte entre les moteurs SQL et PL / SQL et permet au moteur SQL d'extraire les enregistrements à la fois.
Oracle PL / SQL fournit la fonctionnalité de récupération des enregistrements en masse plutôt que de récupération un par un. Cette BULK COLLECT peut être utilisée dans l'instruction 'SELECT' pour remplir les enregistrements en masse ou pour récupérer le curseur en masse. Étant donné que BULK COLLECT récupère l'enregistrement en BULK, la clause INTO doit toujours contenir une variable de type collection. Le principal avantage de l'utilisation de BULK COLLECT est qu'il augmente les performances en réduisant l'interaction entre la base de données et le moteur PL / SQL.
Syntaxe:
SELECT BULK COLLECT INTO bulk_varaible FROM
;FETCH BULK COLLECT INTO ;
Dans la syntaxe ci-dessus, BULK COLLECT est utilisé pour collecter les données à partir des instructions «SELECT» et «FETCH».
Dans ce tutoriel, vous apprendrez-
Clause FORALL
Clause LIMIT
Attributs BULK COLLECT
Clause FORALL
Le FORALL permet d'effectuer les opérations DML sur les données en masse. Elle est similaire à celle de l'instruction de boucle FOR sauf que dans la boucle FOR, les choses se produisent au niveau de l'enregistrement alors que dans FORALL il n'y a pas de concept LOOP. Au lieu de cela, toutes les données présentes dans la plage donnée sont traitées en même temps.
Syntaxe:
FORALL in… ;
Dans la syntaxe ci-dessus, l'opération DML donnée sera exécutée pour toutes les données présentes entre la plage inférieure et supérieure.
Clause LIMIT
Le concept de collecte en bloc charge toutes les données dans la variable de collecte cible en bloc, c'est-à-dire que toutes les données seront remplies dans la variable de collecte en une seule fois. Mais cela n'est pas conseillé lorsque l'enregistrement total à charger est très volumineux, car lorsque PL / SQL essaie de charger toutes les données, il consomme plus de mémoire de session. Par conséquent, il est toujours bon de limiter la taille de cette opération de collecte en vrac.
Cependant, cette limite de taille peut être facilement atteinte en introduisant la condition ROWNUM dans l'instruction 'SELECT', alors que dans le cas du curseur, cela n'est pas possible.
Pour surmonter ce problème, Oracle a fourni une clause «LIMIT» qui définit le nombre d'enregistrements à inclure dans le lot.
Syntaxe:
FETCH BULK COLLECT INTO LIMIT ;
Dans la syntaxe ci-dessus, l'instruction de récupération du curseur utilise l'instruction BULK COLLECT avec la clause LIMIT.
Attributs BULK COLLECT
Similaire aux attributs de curseur, BULK COLLECT a% BULK_ROWCOUNT (n) qui renvoie le nombre de lignes affectées dans la n ème instruction DML de l'instruction FORALL, c'est-à-dire qu'il donnera le nombre d'enregistrements affectés dans l'instruction FORALL pour chaque valeur unique de la collection variable. Le terme «n» indique la séquence de valeurs dans la collection, pour laquelle le nombre de lignes est nécessaire.
Exemple 1 : Dans cet exemple, nous projetterons tous les noms d'employés de la table emp en utilisant BULK COLLECT et nous allons également augmenter le salaire de tous les employés de 5000 en utilisant FORALL.
DECLARECURSOR guru99_det IS SELECT emp_name FROM emp;TYPE lv_emp_name_tbl IS TABLE OF VARCHAR2(50);lv_emp_name lv_emp_name_tbl;BEGINOPEN guru99_det;FETCH guru99_det BULK COLLECT INTO lv_emp_name LIMIT 5000;FOR c_emp_name IN lv_emp_name.FIRST… lv_emp_name.LASTLOOPDbms_output.put_line(‘Employee Fetched:‘||c_emp_name);END LOOP:FORALL i IN lv_emp_name.FIRST… lv emp_name.LASTUPDATE emp SET salaiy=salary+5000 WHERE emp_name=lv_emp_name(i);COMMIT; Dbms_output.put_line(‘Salary Updated‘);CLOSE guru99_det;END;/