CAPITOLUL 23
TIPURI DE DATE COMPUSE
In acest capitol se arata cum se declara si utilizeaza variabile
compuse in PL/SQL. In mod normal, inregistrarile permit aceasta
facilitate, permitind reprezentarea unei linii de la o tabela sau un
view.
Inregistrari in PL/SQL
CE SUNT? - O variabila care poate tine citeva valori separate - O
colectie de cimpuri adresabile CUM SUNT DECLARATE INREGISTRARILE? -
utlizand %ROWTYPE se utlizand atribute declarate Single-row structura
bazata pe o tabela,sau cursor
Inregistrari in PL/SQL
O inregistrare PL/SQL este o variabila care poate contine valori
separate,fiecare adresabila individual. Partile componente ale unei
inregistrari se numesc campuri, si au nume care pot fi referentiate in
atribuiri sau expresii. Campurile dintr-o inregistare pot avea tipuri
de date si marimi diferite. Aceasta inseamna ca inregistrarile sunt
foarte avaantajoase cand preluam o linie dintr-un tabel pentru
procesare intr-un program PL/SQL.
Atributul %ROWTYPE
Atributul ROWTYPE este folosit pentru declararea unei inregistrari
bazata pe o colectie de coloane in tabela de baze de date. Campurile
cu inregistrarea isi vor obtine numele si tipul datei lor de la
coloanele din tabela sau view referit in declararea inregistrarii.
Cimpurile sint declarate intr-o sectiune bloc DECLARE impreuna cu
celelalte tipuri de variabile pe care le-am vazut.
Sintaxa:
identifier reference%ROWTYPE ;
Unde 'identifier' este numele ales pentru inregistrare ca un intreg,
si reference este numele unei tabele, view sau cursor pe care se
bazeaza inregistrarea. Aceasta referinta trebuie sa vie valida la
momentul cind inregistrarea este declarata, adica trebuie sa existe.
Examplu:
DECLARE
emp_rec emp%ROWTYPE
BEGIN
SELECT * INTO emp_rec FROM emp WHERE empno = 7788;
In exemplul de deasupra, inregistrarile 'emp_rec'continind cimpuri
bazate pe fiecare coloana in tabla 'emp'. Cimpul va fi populat cu
linia selectata de catre numele inregistrari din clauza INTO a
instructiunii SELECT.
Starea inregistrarii emp_rec este aratata mai jos:
Empno Ename Job ...
7788 SCOTT ANALYST ...
Cimpurile dintr-o inregistrare pot fi referite individual, atit in
PL/SQL cit si in instructiunile SQL care apar intr-un bloc.
Exemplu:
IF emp_rec.sal
O intreaga inregistrare poate fi asignata ca valoare unei alte inregistrari,
daca tabelele folosite pentru definirea lor se potrivesc.
EXEMPLU:
DECLARE
record1 salgrade%ROWTYPE;
record2 salgrade%ROWTYPE;
BEGIN
.
record2:=record1;
O intrega inregistrare NU poate fi trecuta listei VALUES al instructiunii
INSERT.Trebuie sa parcurgeti fiecare camp separat.
EXEMPLU
INSERT INTO salgrade (grade,losal, hisal) VALUES(record1);--
Illegal
INSERT INTO salgrade(grade, losal, hisal)
VALUES(record1.grade, record1.losal, record1.hisal);--legal
Si va vom arata in urmatorul capitol, ca atributul %ROWTYPE poate fi utilizat
pentru a declara inregistrari bazate pe cursoare explicite.
Aceste inregistrari pot fi utilizate in FETCHuri si in cicluri cu cursor FOR .
Inregistrari definite de utilizatori
Versiunea 2 PL/SQL permite deasemenea sa fie definite si crete independent
tabela de structuri.
Aceste inregistrari definite de utilizator va permit sa numiti explicit
campurile si sa le definiti tipurile.
In anexa veti gasi informatii suplimentare.
MANIPULAREA %ROWTYPE INREGISTRARI SI CAMPURI
EXEMPLUL 1 -copierea intregilor inregistrari
DECLARE
record 1 salgrade%ROWTYPE;
record 2 salgrade%ROWTYPE;
BEGIN
.
record2:=record1;
EXEMPLU2 -- scrierea unei tabele
INSERT INTO emp_history(empno,job,sal,date_stamp)
VALUES(emp_rec.empno,emp_rec.job,emp_rec.sal.,SYSDATE);
BogSoft 1999