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.




