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

Inapoi la cuprins.

BogSoft 1999