Oracle Tipo di record PL/SQL con esempi
⚡ Riepilogo intelligente
Il tipo Record di PL/SQL è un tipo di dati complesso che raggruppa diverse colonne, ognuna con il proprio nome e tipo di dati, in un unico nuovo tipo. Un record può essere definito a livello di database come oggetto memorizzato o all'interno di una sottoprogramma, e i suoi campi sono accessibili tramite l'operatore punto.

Che cos'è un tipo di record?
Un tipo record è un tipo di dati complesso che consente al programmatore di creare un nuovo tipo di dati con la struttura di colonne desiderata. Le sue caratteristiche principali sono:
- Consente di raggruppare una o più colonne per formare un nuovo tipo di dati.
- Ciascuna di queste colonne ha un proprio nome e un proprio tipo di dati.
- Un tipo di record può accettare i dati come un singolo record composto da più colonne, oppure può accettare il valore di una particolare colonna di un record.
- Un tipo record è semplicemente un nuovo tipo di dati. Una volta creato, viene memorizzato come un nuovo tipo di dati e può essere utilizzato per dichiarare una variabile nei programmi.
- Utilizza la parola chiave 'TIPO' per indicare al compilatore che si sta creando un nuovo tipo di dati.
- Può essere creato al livello del database, memorizzato come oggetto del database e utilizzato in tutto il database, oppure al livello del sottoprogrammavisibile solo all'interno del sottoprogramma.
- È possibile dichiarare un tipo di record a livello di database anche per le colonne di una tabella, in modo che una singola colonna possa contenere dati complessi.
- I dati vengono acceduti facendo riferimento al nome della variabile, quindi all'operatore punto (.), quindi al nome della colonna, come ' . '.
Sintassi per dichiarare un tipo di record
Sintassi per la dichiarazione a livello di database:
CREATE TYPE <type_name_db> IS RECORD ( <column 1> <datatype>, );
Nella prima sintassi, la parola chiave 'CREATE TYPE' indica al compilatore di creare il tipo di record denominato "type_name_db" con le colonne specificate come oggetto database. Questa istruzione viene fornita singolarmente, non all'interno di alcun blocco.
Sintassi per la dichiarazione a livello di sottoprogramma:
DECLARE TYPE <type_name> IS RECORD ( <column1> <datatype>, ); BEGIN <execution_section>; END;
In questa sintassi, creiamo il tipo di record denominato "type_name" solo all'interno della sottoprogramma. In entrambi i metodi, il modo di definire la colonna e il tipo di dati è simile.
Esempio 1: Tipo di record come oggetto di database
In questo programma, vediamo come creare un tipo di record come oggetto di database. Creiamo il tipo di record 'emp_det' con quattro colonne. Le colonne e i relativi tipi di dati sono:
- EMP_NO (NUMERO)
- NOME_EMP (VARCHAR2 (150))
- RESPONSABILE (NUMERO)
- STIPENDIO (NUMERO)
CREATE TYPE emp_det IS OBJECT ( EMP_NO NUMBER, EMP_NAME VARCHAR2(150), MANAGER NUMBER, SALARY NUMBER ); /
Produzione:
Type created
Code Spiegazione
- Il codice sopra riportato crea il tipo emp_det come oggetto del database.
- È composto da 4 colonne: emp_no, emp_name, manager e salary, come definito.
- Ora 'emp_det' è simile a qualsiasi altro tipo di dati (come NUMBER o VARCHAR2) ed è visibile in tutto il database. Pertanto, può essere utilizzato ovunque nel database per dichiarare una variabile di questo tipo.
Esempio 2: Accesso a livello di sottoprogramma e a livello di colonna
In questo esempio, vediamo come creare un tipo di record a livello di sottoprogramma e come popolarlo e recuperare i valori per colonna. Creiamo il tipo di record 'emp_det' a livello di sottoprogramma e lo utilizziamo per popolare e visualizzare i dati.
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; /
Produzione:
Employee Detail Employee Number: 1001 Employee Name: XXX Employee Salary: 10000 Employee Manager Number: 1000
Code Spiegazione
- Code righe 2-8: Il tipo di record 'emp_det' è dichiarato con le colonne emp_no, emp_name, manager e salary di tipo dati NUMBER, VARCHAR2, NUMBER e NUMBER.
- Code riga 9: La variabile guru99_emp_rec è dichiarata come tipo di dati 'emp_det'. Questo variabile può contenere un valore che include tutti e quattro i campi.
- Code riga 11: Compilando il campo 'emp_no' di 'guru99_emp_rec' con il valore 1001.
- Code riga 12: Inserimento del valore XXX nel campo 'emp_name'.
- Code riga 13: Inserimento del valore 1000 nel campo 'manager'.
- Code riga 14: Inserimento del valore 10000 nel campo 'stipendio'.
- Code righe 15-19: Visualizzazione del valore di 'guru99_emp_rec' nell'output.
Esempio 3: Accesso a livello di riga a livello di sottoprogramma
In questo esempio, vediamo come creare un tipo di record a livello di sottoprogramma e popolarlo a livello di riga. Creiamo il tipo di record 'emp_det' a livello di sottoprogramma e lo utilizziamo per popolare e visualizzare i dati.
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 Spiegazione
- Code righe 2-8: Il tipo di record 'emp_det' è dichiarato con le colonne emp_no, emp_name, manager e salary di tipo dati NUMBER, VARCHAR2, NUMBER e NUMBER.
- Code riga 9: La variabile guru99_emp_rec è dichiarata come tipo di dati 'emp_det' e può contenere tutti e quattro i campi.
- Code riga 11: Popolamento della tabella emp con 1002 come emp_no, YYY come emp_name, 15000 come stipendio e 1000 come numero del responsabile.
- Code riga 12: Commiting della transazione di inserimento.
- Code riga 13: Popolamento della variabile 'guru99_emp_rec' a livello di riga dalla query SELECT per il dipendente numero 1002.
- Code righe 15-19: Visualizzazione del valore di 'guru99_emp_rec' nell'output.
Produzione:
Employee Detail Employee Number: 1002 Employee Name: YYY Employee Salary: 1000 Employee Manager Number: 15000
Nota: Un tipo di record può essere acceduto solo a livello di colonna quando si reindirizza il suo valore a una qualsiasi modalità di output. Si noti che in questo esempio l'ordine dell'elenco SELECT non corrisponde all'ordine dei campi del record, motivo per cui i valori di stipendio e responsabile appaiono scambiati nell'output.
Tipi di record PL/SQL
Oltre al record definito dal programmatore mostrato sopra, Oracle Offre due tipi di record ancorati che copiano automaticamente la loro struttura. Il loro utilizzo evita di ridichiarare le colonne e mantiene il record allineato alla tabella o al cursore su cui si basa.
| Tipo di record | Dichiarato con | La struttura deriva da |
|---|---|---|
| record basato su tabella | table_name%ROWTYPE | Tutte le colonne di una tabella |
| Record basato sul cursore | nome_cursore%ROWTYPE | Elenco di selezione del cursore |
| Record definito dal programmatore | TIPO … È REGISTRAZIONE | Colonne che elenchi manualmente |
Un record %ROWTYPE è la scelta più sicura quando la forma deve seguire una tabella o un cursore, perché una modifica alla colonna viene rilevata automaticamente alla successiva compilazione.




