Oracle Tip de înregistrări PL/SQL cu exemple

⚡ Rezumat inteligent

Tipul de înregistrare PL/SQL este un tip de date complex care grupează mai multe coloane, fiecare cu propriul nume și tip de date, într-un singur tip nou. O înregistrare poate fi definită la nivel de bază de date ca obiect stocat sau în interiorul unui subprogram, iar câmpurile sale sunt accesate cu operatorul punct.

  • 🧱 Definiție: Un tip de înregistrare grupează una sau mai multe coloane într-un singur tip de date nou.
  • 🔑 Cuvânt cheie: Cuvântul cheie TYPE îi spune compilatorului că se creează un nou tip de date.
  • 🏛️ Două niveluri: O înregistrare la nivel de bază de date este un obiect stocat; o înregistrare la nivel de subprogram este vizibilă numai în interiorul subprogramului respectiv.
  • 🔗 Acces pe teren: Câmpurile sunt accesate ca record_variable.column_name folosind operatorul punct.
  • 📥 La nivel de coloană: Valorile pot fi atribuite unui singur câmp la un moment dat.
  • 📦 La nivel de rând: O instrucțiune SELECT INTO poate popula o întreagă înregistrare dintr-un rând dintr-un tabel.
  • 🧩 Tipuri de înregistrări: Înregistrări %ROWTYPE bazate pe tabel, %ROWTYPE bazate pe cursor și înregistrări definite de programator.

Oracle Tip înregistrări PL/SQL

Ce este un tip de înregistrare?

Un tip de înregistrare este un tip de date complex care permite programatorului să creeze un nou tip de date cu structura de coloane dorită. Principalele sale caracteristici sunt:

  • Grupează una sau mai multe coloane pentru a forma un nou tip de date.
  • Fiecare dintre aceste coloane are propriul nume și tip de date.
  • Un tip de înregistrare poate accepta datele ca o singură înregistrare formată din mai multe coloane sau poate accepta valoarea pentru o anumită coloană a unei înregistrări.
  • Un tip de înregistrare este pur și simplu un nou tip de date. Odată creat, acesta este stocat ca un nou tip de date și poate fi utilizat pentru a declara o variabilă în programe.
  • Folosește cuvântul cheie 'TIP' pentru a instrui compilatorul că se creează un nou tip de date.
  • Poate fi creat la nivel de bază de date, stocat ca obiect al bazei de date și utilizat în întreaga bază de date sau la nivel de subprogram, vizibilă doar în interiorul subprogramului.
  • Un tip de înregistrare la nivel de bază de date poate fi declarat și pentru coloanele tabelului, astfel încât o singură coloană să poată conține date complexe.
  • Datele sunt accesate prin referire la numele variabilei, apoi la un operator punct (.), apoi la numele coloanei, ca ' . „.

Sintaxa pentru declararea unui tip de înregistrare

Sintaxă pentru declararea la nivel de bază de date:

Declararea tipului de înregistrare la nivel de bază de date

CREATE TYPE <type_name_db> IS RECORD
(
<column 1> <datatype>,
);

În prima sintaxă, cuvântul cheie „CREATE TYPE” instruiește compilatorul să creeze tipul de înregistrare numit „nume_tip_db” cu coloanele specificate ca obiect al bazei de date. Aceasta este dată ca o instrucțiune individuală, nu în interiorul vreunui bloc.

Sintaxa pentru declararea la nivel de subprogram:

Declararea tipului de înregistrare la nivel de subprogram

DECLARE
TYPE <type_name> IS RECORD
(
<column1> <datatype>,
);
BEGIN
<execution_section>;
END;

În această sintaxă, creăm tipul de înregistrare numit „nume_tip” doar în interiorul subprogramului. În ambele metode, modul de definire a coloanei și a tipului de date este similar.

Exemplul 1: Tipul de înregistrare ca obiect al bazei de date

În acest program, vom vedea cum se creează un tip de înregistrare ca obiect de bază de date. Creăm tipul de înregistrare „emp_det” cu patru coloane. Coloanele și tipurile lor de date sunt:

  • EMP_NO (NUMĂR)
  • EMP_NAME (VARCHAR2 (150))
  • MANAGER (NUMĂR)
  • SALARIU (NUMĂR)
CREATE TYPE emp_det IS OBJECT
(
EMP_NO NUMBER,
EMP_NAME VARCHAR2(150),
MANAGER NUMBER,
SALARY NUMBER
);
/

ieșire:

Type created

Code Explicație

  • Codul de mai sus creează tipul emp_det ca obiect de bază de date.
  • Are 4 coloane: emp_no, emp_name, manager și salariu, așa cum sunt definite.
  • Acum, „emp_det” este similar cu oricare alt tip de date (precum NUMBER sau VARCHAR2) și este vizibilă în întreaga bază de date. Prin urmare, poate fi utilizată oriunde în baza de date pentru a declara o variabilă de acest tip.

Exemplul 2: Acces la nivel de subprogram, la nivel de coloană

În acest exemplu, vedem cum se creează un tip de înregistrare la nivel de subprogram și cum se populează și se preiau valori din acesta pe coloane. Creăm tipul de înregistrare „emp_det” la nivel de subprogram și îl folosim pentru a popula și afișa date.

Exemplu de acces la nivel de coloană pentru tipul de înregistrare

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;
/

ieșire:

Employee Detail
Employee Number: 1001
Employee Name: XXX
Employee Salary: 10000
Employee Manager Number: 1000

Code Explicație

  • Code liniile 2-8: Tipul de înregistrare „emp_det” este declarat cu coloanele emp_no, emp_name, manager și salary de tipuri de date NUMBER, VARCHAR2, NUMBER și NUMBER.
  • Code linia 9: Variabila guru99_emp_rec este declarată ca fiind de tipul de date „emp_det”. Aceasta variabil poate conține o valoare care conține toate cele patru câmpuri.
  • Code linia 11: Se completează câmpul „emp_no” al „guru99_emp_rec” cu valoarea 1001.
  • Code linia 12: Se completează câmpul „emp_name” cu valoarea XXX.
  • Code linia 13: Se completează câmpul „manager” cu valoarea 1000.
  • Code linia 14: Se completează câmpul „salariu” cu valoarea 10000.
  • Code liniile 15-19: Afișarea valorii lui „guru99_emp_rec” în rezultat.

Exemplul 3: Acces la nivel de subprogram, la nivel de rând

În acest exemplu, vedem cum se creează un tip de înregistrare la nivel de subprogram și cum se populează la nivel de rând. Creăm tipul de înregistrare „emp_det” la nivel de subprogram și îl folosim pentru a popula și afișa date.

Exemplu de acces la nivel de rând pentru tipul de înregistrare

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 Explicație

  • Code liniile 2-8: Tipul de înregistrare „emp_det” este declarat cu coloanele emp_no, emp_name, manager și salary de tipuri de date NUMBER, VARCHAR2, NUMBER și NUMBER.
  • Code linia 9: Variabila guru99_emp_rec este declarată ca fiind de tipul de date „emp_det” și poate conține toate cele patru câmpuri.
  • Code linia 11: Se popularizează tabelul emp cu 1002 ca nr_angajator, YYY ca nume_angajator, 15000 ca salariu și 1000 ca număr de manager.
  • Code linia 12: Efectuarea tranzacției de inserare.
  • Code linia 13: Se popularizează variabila „guru99_emp_rec” la nivel de rând din interogarea de selecție pentru angajatul numărul 1002.
  • Code liniile 15-19: Afișarea valorii lui „guru99_emp_rec” în rezultat.

ieșire:

Employee Detail
Employee Number: 1002
Employee Name: YYY
Employee Salary: 1000
Employee Manager Number: 15000

Notă: Un tip de înregistrare poate fi accesat doar la nivel de coloană atunci când valoarea sa este redirecționată către orice mod de ieșire. Observați că în acest exemplu ordinea listei SELECT nu corespunde cu ordinea câmpului de înregistrare, motiv pentru care valorile salariului și managerului apar inversate în ieșire.

Tipuri de înregistrări PL/SQL

Dincolo de înregistrarea definită de programator prezentată mai sus, Oracle oferă două tipuri de înregistrări ancorate care își copiază automat structura. Utilizarea lor evită redeclararea coloanelor și menține înregistrarea în pas cu tabelul sau cursorul pe care se bazează.

Tipul de înregistrare Declarat cu Structura provine din
Înregistrare bazată pe tabel nume_tabel%ROWTYPE Toate coloanele unui tabel
Înregistrare bazată pe cursor cursor_name%ROWTYPE Lista de selecție a cursorului
Înregistrare definită de programator TIPUL … ESTE ÎNREGISTRARE Coloane pe care le listați manual

O înregistrare %ROWTYPE este cea mai sigură alegere atunci când forma trebuie să urmeze un tabel sau o cursor, deoarece o modificare de coloană este preluată automat la următoarea compilare.

Întrebări frecvente

O înregistrare grupează diferite coloane de tipuri posibil diferite într-o singură structură asemănătoare unui rând. O colecție conține mai multe elemente de același tip indexate printr-un indice. Acestea sunt adesea combinate, o colecție de înregistrări.

%ROWTYPE declară o înregistrare ale cărei câmpuri se potrivesc automat cu un tabel sau cursor. Se utilizează atunci când înregistrarea ar trebui să reflecte acea sursă, astfel încât o modificare a coloanei să fie reflectată fără a edita declarația.

Da, dacă ambele înregistrări sunt de același tip. SELECT INTO poate completa și o înregistrare întreagă dintr-un rând de tabel, cu condiția ca ordinea din lista de selecție să corespundă cu ordinea câmpurilor înregistrării.

Da. Inteligența artificială poate citi definiția unui tabel și poate produce un bloc TYPE … IS RECORD corespunzător sau poate recomanda un bloc %ROWTYPE unde este preferabilă o legătură directă către tabel. Verificați tipurile de date înainte de utilizare.

O înregistrare la nivel de bază de date este creată cu CREATE TYPE și stocată ca un obiect vizibil în baza de date. O înregistrare la nivel de subprogram este declarată în interiorul unui bloc și există numai în subprogramul respectiv.

Rezumați această postare cu: