Dans ce tutoriel, je donne 4 exemples de blocs anonymes PL/SQL, afin que vous puissiez apprendre à créer et à utiliser des blocs anonymes dans la base de données Oracle. Les blocs anonymes en PL/SQL sont les programmes qui n'ont pas d'instruction Create Procedure ou Create Function, et ils ne sont pas enregistrés dans la base de données Oracle. Blocs anonymes PL/SQL principalement utilisés pour tester ou exécuter le programme dans la base de données Oracle une seule fois.
1. Bloc anonyme PL/SQL pour imprimer les nombres dans l'ordre inverse
Le programme PL/SQL suivant imprimera les nombres de 0 à 10 dans l'ordre inverse, en utilisant la clause REVERSE dans la boucle for.
SET SERVEROUTPUT ON;
DECLARE
counter NUMBER;
BEGIN
FOR counter IN REVERSE 0..10 LOOP
DBMS_OUTPUT.PUT_LINE (counter);
END LOOP;
END;
/ Sortie
10 9 8 7 6 5 4 3 2 1 0 PL/SQL procedure successfully completed.
2. Imprimer le nombre d'employés dans un service
Le programme PL/SQL suivant comptera les employés du service 90. Le tableau provient du schéma RH de la base de données Oracle. Vous pouvez télécharger ce schéma à partir du lien suivant Télécharger le schéma RH.
SET SERVEROUTPUT ON;
DECLARE
emp_count NUMBER;
v_department_id NUMBER := 90;
BEGIN
SELECT COUNT ( * )
INTO emp_count
FROM employees
WHERE department_id = v_department_id;
DBMS_OUTPUT.PUT_LINE( 'The employee count is: '
|| emp_count
|| ' for the department with an ID of: '
|| v_department_id);
END;
/ Sortie
The employee count is: 3 for the department with an ID of: 90 PL/SQL procedure successfully completed.
3. Prendre une entrée dans PL/SQL Anonymous Block and Print
Dans l'exemple ci-dessous, il demandera à l'utilisateur de saisir l'identifiant du service et imprimera le nombre d'employés dans ce service, ainsi que le nom du service.
SET SERVEROUTPUT ON;
DECLARE
dept_id_var NUMBER (4) := &department_id;
dept_name VARCHAR2 (30);
emp_count NUMBER;
BEGIN
SELECT COUNT ( * )
INTO emp_count
FROM employees
WHERE department_id = dept_id_var;
SELECT department_name
INTO dept_name
FROM departments
WHERE department_id = dept_id_var;
DBMS_OUTPUT.PUT_LINE( 'There are '
|| emp_count
|| ' employees '
|| 'in the '
|| dept_name
|| ' department.');
END;
/ Sortie
Enter value for department_id: 60 old 2: dept_id_var NUMBER(4) := &department_id; new 2: dept_id_var NUMBER(4) := 60; There are 4 employees in the IT department. PL/SQL procedure successfully completed.
4. Bloc PL/SQL avec <> Exemple
Le bloc PL/SQL suivant utilise les étiquettes pour les blocs parent et enfant. Le bloc enfant accédera à la variable du bloc parent en utilisant la référence d'étiquette du bloc parent. Le programme mettra à jour l'ancien identifiant de responsable avec le nouvel identifiant de responsable pour les départements.
SET SERVEROUTPUT ON;
<<outer_block>>
DECLARE
mgr_id NUMBER (6) := '¤t_manager_id';
dept_count NUMBER := 0;
BEGIN
SELECT COUNT ( * )
INTO dept_count
FROM departments
WHERE manager_id = outer_block.mgr_id;
IF dept_count > 0
THEN
<<inner_block>>
DECLARE
dept_name VARCHAR2 (30);
mgr_id NUMBER (6) := '&new_manager_id';
BEGIN
SELECT department_name
INTO dept_name
FROM departments
WHERE manager_id = outer_block.mgr_id;
UPDATE departments
SET manager_id = inner_block.mgr_id
WHERE manager_id = outer_block.mgr_id;
DBMS_OUTPUT.PUT_LINE (
'Department manager ID has been changed for ' || dept_name);
END inner_block;
ELSE
DBMS_OUTPUT.PUT_LINE (
'There are no departments listed for the manager');
END IF;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
DBMS_OUTPUT.PUT_LINE (
'There are no departments listed for the manager');
END outer_block;
/ Sortie
Enter value for current_manager_id: 100 old 3: mgr_id NUMBER (6) := '¤t_manager_id'; new 3: mgr_id NUMBER (6) := '100'; Enter value for new_manager_id: 201 old 16: mgr_id NUMBER (6) := '&new_manager_id'; new 16: mgr_id NUMBER (6) := '201'; Department manager ID has been changed for Executive PL/SQL procedure successfully completed.
-
Comment renommer toutes les contraintes par défaut selon les normes de dénomination ou la convention de dénomination dans SQL Server - Tutoriel SQL Server / TSQL Partie 93
-
Le problème de perte de mise à jour dans les transactions simultanées
-
OLTP en mémoire SQL Server :les bases
-
Annonce de la prise en charge de Spotlight Cloud pour Azure SQL DB (préversion)