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.

  • ๐Ÿงฑ Definizione: Un tipo di record raggruppa una o piรน colonne in un unico nuovo tipo di dati.
  • ๐Ÿ”‘ Parola chiave: La parola chiave TYPE indica al compilatore che si sta creando un nuovo tipo di dati.
  • ๏ธ Due livelli: Un record a livello di database รจ un oggetto memorizzato; un record a livello di sottoprogramma รจ visibile solo all'interno di tale sottoprogramma.
  • ๐Ÿ”— Accesso al campo: I campi vengono raggiunti come record_variabile.nome_colonna utilizzando l'operatore punto.
  • ๐Ÿ“ฅ A livello di colonna: รˆ possibile assegnare valori a un solo campo alla volta.
  • ๐Ÿ“ฆ Livello di riga: Un'istruzione SELECT INTO puรฒ popolare un intero record a partire da una riga di una tabella.
  • ๐Ÿงฉ Tipi di record: Record %ROWTYPE basati su tabelle, record %ROWTYPE basati su cursori e record definiti dal programmatore.

Oracle Tipo di record PL/SQL

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:

Dichiarazione del tipo di record 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:

Dichiarazione del tipo di record 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.

Esempio di accesso a livello di colonna del tipo di record

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.

Esempio di accesso a livello di riga del tipo di record

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.

DOMANDE FREQUENTI

Un record raggruppa diverse colonne, potenzialmente di tipi diversi, in un'unica struttura a riga. Una collezione contiene molti elementi dello stesso tipo, indicizzati da un indice. Spesso vengono combinati, formando una collezione di record.

%ROWTYPE dichiara un record i cui campi corrispondono automaticamente a una tabella o a un cursore. Utilizzalo quando il record deve rispecchiare tale origine, in modo che una modifica a una colonna venga riflessa senza dover modificare la dichiarazione.

Sรฌ, se entrambi i record sono dello stesso tipo. SELECT INTO puรฒ anche riempire un intero record da una riga di tabella, a condizione che l'ordine dell'elenco di selezione corrisponda all'ordine dei campi del record.

Sรฌ. L'IA puรฒ leggere la definizione di una tabella e produrre un blocco TYPE โ€ฆ IS RECORD corrispondente, oppure consigliare un %ROWTYPE laddove sia preferibile un collegamento diretto alla tabella. Verificare i tipi di dati prima dell'uso.

Un record a livello di database viene creato con CREATE TYPE e memorizzato come oggetto visibile in tutto il database. Un record a livello di sottoprogramma viene dichiarato all'interno di un blocco ed esiste solo all'interno di quel sottoprogramma.

Riassumi questo post con: