Oracle Type d'enregistrements PL/SQL avec exemples
โก Rรฉsumรฉ intelligent
Le type Enregistrement PL/SQL est un type de donnรฉes complexe qui regroupe plusieurs colonnes, chacune ayant son propre nom et son propre type de donnรฉes, en un seul type. Un enregistrement peut รชtre dรฉfini au niveau de la base de donnรฉes comme un objet stockรฉ ou dans un sous-programme, et ses champs sont accessibles ร l'aide de l'opรฉrateur point.

Qu'est-ce qu'un type d'enregistrement ?
Un type d'enregistrement est un type de donnรฉes complexe qui permet au programmeur de crรฉer un nouveau type de donnรฉes avec la structure de colonnes souhaitรฉe. Ses principales caractรฉristiques sont :
- Il regroupe une ou plusieurs colonnes pour former un nouveau type de donnรฉes.
- Chacune de ces colonnes possรจde son propre nom et son propre type de donnรฉes.
- Un type d'enregistrement peut accepter les donnรฉes sous la forme d'un enregistrement unique composรฉ de plusieurs colonnes, ou il peut accepter la valeur d'une colonne particuliรจre d'un enregistrement.
- Un type d'enregistrement est simplement un nouveau type de donnรฉes. Une fois crรฉรฉ, il est stockรฉ comme un nouveau type de donnรฉes et peut รชtre utilisรฉ pour dรฉclarer une variable dans les programmes.
- Il utilise le mot-clรฉ 'TAPER' pour indiquer au compilateur qu'un nouveau type de donnรฉes est en cours de crรฉation.
- Il peut รชtre crรฉรฉ au niveau de base de donnรฉes, stockรฉ en tant qu'objet de base de donnรฉes et utilisรฉ dans toute la base de donnรฉes, ou au niveau de niveau du sous-programme, visible uniquement ร l'intรฉrieur du sous-programme.
- Un type d'enregistrement au niveau de la base de donnรฉes peut รฉgalement รชtre dรฉclarรฉ pour les colonnes de table, afin qu'une seule colonne puisse contenir des donnรฉes complexes.
- Les donnรฉes sont accessibles en faisant rรฉfรฉrence au nom de la variable, puis ร l'opรฉrateur point (.), puis au nom de la colonne, comme ' . '.
Syntaxe pour dรฉclarer un type d'enregistrement
Syntaxe de dรฉclaration au niveau de la base de donnรฉes :
CREATE TYPE <type_name_db> IS RECORD ( <column 1> <datatype>, );
Dans la premiรจre syntaxe, le mot-clรฉ ยซ CREATE TYPE ยป indique au compilateur de crรฉer un objet de base de donnรฉes de type enregistrement nommรฉ ยซ type_name_db ยป avec les colonnes spรฉcifiรฉes. Cette instruction est fournie individuellement, hors de tout bloc.
Syntaxe pour la dรฉclaration au niveau du sous-programme :
DECLARE TYPE <type_name> IS RECORD ( <column1> <datatype>, ); BEGIN <execution_section>; END;
Dans cette syntaxe, le type d'enregistrement nommรฉ ยซ type_name ยป est crรฉรฉ uniquement ร l'intรฉrieur du sous-programme. La dรฉfinition de la colonne et du type de donnรฉes est similaire dans les deux mรฉthodes.
Exemple 1 : Type dโenregistrement en tant quโobjet de base de donnรฉes
Dans ce programme, nous voyons comment crรฉer un type d'enregistrement en tant qu'objet de base de donnรฉes. Nous crรฉons le type d'enregistrement ยซ emp_det ยป avec quatre colonnes. Voici les colonnes et leurs types de donnรฉes :
- EMP_NO (NOMBRE)
- EMP_NAME (VARCHAR2 (150))
- DIRECTEUR (NUMรRO)
- SALAIRE (NOMBRE)
CREATE TYPE emp_det IS OBJECT ( EMP_NO NUMBER, EMP_NAME VARCHAR2(150), MANAGER NUMBER, SALARY NUMBER ); /
Sortie :
Type created
Code Explication
- Le code ci-dessus crรฉe le type emp_det en tant qu'objet de base de donnรฉes.
- Elle comporte 4 colonnes : emp_no, emp_name, manager et salary, comme dรฉfini.
- Maintenant, 'emp_det' est similaire ร n'importe quel autre Type de donnรฉes (comme NUMBER ou VARCHAR2) et est visible dans toute la base de donnรฉes. Par consรฉquent, il peut รชtre utilisรฉ n'importe oรน dans la base de donnรฉes pour dรฉclarer une variable de ce type.
Exemple 2 : Accรจs au niveau du sous-programme et au niveau de la colonne
Dans cet exemple, nous voyons comment crรฉer un type d'enregistrement au niveau du sous-programme et comment le remplir et en extraire des valeurs par colonne. Nous crรฉons le type d'enregistrement ยซ emp_det ยป au niveau du sous-programme et l'utilisons pour remplir et afficher des donnรฉes.
DECLARE TYPE emp_det IS RECORD ( EMP_NO NUMBER, EMP_NAME VARCHAR2(150), MANAGER NUMBER, SALARY NUMBER ); guru99_emp_rec emp_det; BEGIN guru99_emp_rec.emp_no:= 1001; guru99_emp_rec.emp_name:= 'XXX'; guru99_emp_rec.manager:= 1000; guru99_emp_rec.salary:= 10000; dbms_output.put_line('Employee Detail'); dbms_output.put_line ('Employee Number: '||guru99_emp_rec.emp_no); dbms_output.put_line ('Employee Name: '||guru99_emp_rec.emp_name); dbms_output.put_line ('Employee Salary: ' ||guru99_emp_rec.salary); dbms_output.put_line ('Employee Manager Number: '||guru99_emp_rec.manager); END; /
Sortie :
Employee Detail Employee Number: 1001 Employee Name: XXX Employee Salary: 10000 Employee Manager Number: 1000
Code Explication
- Code lignes 2-8 : Le type d'enregistrement 'emp_det' est dรฉclarรฉ avec les colonnes emp_no, emp_name, manager et salary de type de donnรฉes NUMBER, VARCHAR2, NUMBER et NUMBER.
- Code ligne 9: La variable guru99_emp_rec est dรฉclarรฉe comme รฉtant de type de donnรฉes 'emp_det'. variable peut contenir une valeur qui inclut les quatre champs.
- Code ligne 11: Remplir le champ 'emp_no' de 'guru99_emp_rec' avec la valeur 1001.
- Code ligne 12: Renseignez le champ ยซ emp_name ยป avec la valeur XXX.
- Code ligne 13: Renseignez le champ ยซ responsable ยป avec la valeur 1000.
- Code ligne 14: Renseignez le champ ยซ salaire ยป avec la valeur 10000.
- Code lignes 15-19 : Affichage de la valeur de 'guru99_emp_rec' dans le rรฉsultat.
Exemple 3 : Accรจs au niveau du sous-programme et au niveau des lignes
Dans cet exemple, nous voyons comment crรฉer un type d'enregistrement au niveau du sous-programme et le renseigner au niveau de la ligne. Nous crรฉons le type d'enregistrement ยซ emp_det ยป au niveau du sous-programme et l'utilisons pour renseigner et afficher des donnรฉes.
DECLARE TYPE emp_det IS RECORD ( EMP_NO NUMBER, EMP_NAME VARCHAR2(150), MANAGER NUMBER, SALARY NUMBER ); guru99_emp_rec emp_det; BEGIN INSERT INTO emp (emp_no, emp_name, salary, manager) VALUES (1002,'YYY',15000,1000); COMMIT; SELECT emp_no, emp_name, salary, manager INTO guru99_emp_rec FROM emp WHERE emp_no=1002; dbms_output.put_line ('Employee Detail'); dbms_output.put_line ('Employee Number: '||guru99_emp_rec.emp_no); dbms_output.put_line ('Employee Name: '||guru99_emp_rec.emp_name); dbms_output.put_line ('Employee Salary: '||guru99_emp_rec.salary); dbms_output.put_line ('Employee Manager Number: '||guru99_emp_rec.manager); END; /
Code Explication
- Code lignes 2-8 : Le type d'enregistrement 'emp_det' est dรฉclarรฉ avec les colonnes emp_no, emp_name, manager et salary de type de donnรฉes NUMBER, VARCHAR2, NUMBER et NUMBER.
- Code ligne 9: La variable guru99_emp_rec est dรฉclarรฉe comme รฉtant de type de donnรฉes 'emp_det' et peut contenir les quatre champs.
- Code ligne 11: Remplissage de la table emp avec 1002 comme emp_no, YYY comme emp_name, 15000 comme salary et 1000 comme manager number.
- Code ligne 12: Validation de la transaction d'insertion.
- Code ligne 13: Remplissage de la variable 'guru99_emp_rec' au niveau de la ligne ร partir de la requรชte SELECT pour l'employรฉ numรฉro 1002.
- Code lignes 15-19 : Affichage de la valeur de 'guru99_emp_rec' dans le rรฉsultat.
Sortie :
Employee Detail Employee Number: 1002 Employee Name: YYY Employee Salary: 1000 Employee Manager Number: 15000
ร noter: Un type d'enregistrement n'est accessible qu'au niveau de la colonne lors de la redirection de sa valeur vers un mode de sortie. Notez que dans cet exemple, l'ordre de la liste SELECT ne correspond pas ร l'ordre des champs de l'enregistrement, ce qui explique pourquoi les valeurs ยซ salaire ยป et ยซ responsable ยป apparaissent inversรฉes dans le rรฉsultat.
Types d'enregistrements PL/SQL
Au-delร de l'enregistrement dรฉfini par le programmeur et prรฉsentรฉ ci-dessus, Oracle Ce module propose deux types d'enregistrements ancrรฉs qui copient automatiquement leur structure. Leur utilisation รฉvite de redรฉclarer les colonnes et garantit que l'enregistrement reste synchronisรฉ avec la table ou le curseur sur lequel il est basรฉ.
| Type d'enregistrement | Dรฉclarรฉ avec | La structure provient de |
|---|---|---|
| Enregistrement basรฉ sur une table | nom_table%TYPE_LIGNE | Toutes les colonnes d'un tableau |
| Enregistrement basรฉ sur un curseur | nom_curseur%TYPE_LIGNE | Liste de sรฉlection du curseur |
| Enregistrement dรฉfini par le programmeur | TYPE โฆ EST UN ENREGISTREMENT | Colonnes que vous listez manuellement |
Un enregistrement %ROWTYPE est le choix le plus sรปr lorsque la forme doit suivre un tableau ou un curseur, car toute modification de colonne est automatiquement prise en compte lors de la prochaine compilation.




