Home - Rasfoiesc.com
Educatie Sanatate Inginerie Business Familie Hobby Legal
Doar rabdarea si perseverenta in invatare aduce rezultate bune.stiinta, numere naturale, teoreme, multimi, calcule, ecuatii, sisteme




Biologie Chimie Didactica Fizica Geografie Informatica
Istorie Literatura Matematica Psihologie

Sql


Index » educatie » » informatica » Sql
Tipuri compuse de date


Tipuri compuse de date


Tipuri compuse de date

Tipurile de date compuse sunt: RECORD si TABLE. Utilizam tipul RECORD (inregistrare) pentru a prelucra tipuri de date diferite ca o unitate logica. Tipul de date TABLE permite prelucrarea si manipularea colectiilor de date ca intreg obiect.

O inregistrare este un grup de date inrudite stocate in campuri, fiecare cu propriul sau nume si tip. De exemplu, presupunem ca avem diferite feluri de date despre un angajat cum ar fi nume, salar, data angajarii. Aceste date sunt de diferite tipuri, dar inrudite logic, deci vor fi tratate ca o unitate logica. Cind declaram un tip inregistrare pentru aceste cimpuri, ele vor fi manipulate ca o unitate.

Fiecare inregistrare definita poate avea mai multe campuri.



Inregistrarile pot fi asignate cu valori initiale si pot fi definite ca NOT NULL.

Campurile fara valori initiale sunt initializate ca NULL.

Cuvantul cheie DEFAULT poate fi folosit cand definim campurile.

Putem defini tipul RECORD si declara inregistrari definite de utilizator in partea declarativa a oricarui bloc, subprogram sau pachet.

Putem declara si referi inregistrari incuibate. O inregistrare poate fi componenta unei alte inregistrari.

Definirea unui tip inregistrare are sintaxa:

TYPE type_name IS RECORD

(field_declaration [, field_declaration] . );

identifier type_name;

iar field_declaration are sintaxa:

field_name

[ [ NOT NULL] expr]

unde:

type_name este numele tipului inregistrare.

field_name este numele campului dintr-o inregistrare.

field_type    este tipul de data al campului, reprezinta orice tip de data PL/SQL exceptand REF CURSOR. Putem folosi atributele %TYPE si    %ROWTYPE.

expr este un tip de data sau o valoare initiala.

Exemplu: Declaram o variabila inregistare care contine, numele, job-ul si salariul unui angajat.

TYPE emp_record_type IS RECORD

(ename VARCHAR2(10),

job VARCHAR2(9),

sal NUMBER(7,2));

emp_record emp_record_type;

Fiecare camp are un nume unic si un tip de data specificat. Trebuie sa definim inainte tipurile de date si apoi sa declaram o variabila folosind acel tip de data. Urmatorul exemplu, arata cum putem folosi atributul %TYPE pentru a specifica tipul de data al unui camp:

DECLARE

TYPE emp_record_type IS RECORD

(empno    NUMBER(4) NOT NULL := 100,

ename emp.ename%TYPE,

job emp.job%TYPE);

emp_record emp_record_type;

Campurile declarate NOT NULL trebuiesc initializate. Campurile dintr-o inregistrare sunt accesate prin nume. Pentru referirea sau initializarea unui camp dintr-o inregistrare, folosim urmatoarea sintaxa:

record_name.field_name

De exemplu, putem referi campul job din inregistrarea emp_record astfel:

emp_record.job .

Asignarea unei valori unui camp al unei inregistrari se realizeaza astfel:

emp_record.job := 'ANALIST';

Putem asigna o lista de valori unei inregistrari prin folosirea declaratiei SELECT sau FETCH, dar numele coloanelor trebuie sa apara in aceeasi ordine cu campurile din inregistrare. Se poate asigna o inregistrare unei alte inregistrari daca sunt de acelasi tip. O inregistrare definita de utilizator si o inregistrare definita cu atributul %ROWTYPE niciodata nu au acelasi tip.

Pentru declararea unei inregistrari bazate pe o colectie de coloane dintr-un tabel sau dintr-un view, putem folosi atributul %ROWTYPE. Campurile inregistrari au acelasi numele si acelasi tip cu coloanele tabelului sau view-ului.

In urmatorul exemplu o inregistrare este declarata folosind atributul %ROWTYPE:

DECLARE

emp_record    emp%ROWTYPE;

Inregistrarea emp_record va contine coloanele tabelei EMP.

Putem salva valorile unor coloane dintr-o tabela intr-o variabila inregistrare, astfel:

DECLARE

item_record emp%ROWTYPE;

. ..

BEGIN

SELECT * INTO item_record

FROM emp

WHERE ename = 'BLAKE'

. ..

Obiectele de tipul TABLE sunt numite in PL/SQL tabele. Tabelele PL/SQL utilizeaza o cheie primara pentru a accesa randurile.

O tabela PL/SQL trebuie sa contina doua componente: o cheie primara de tipul BINARY_INTEGER care este indexul tabelei si o coloana de tip scalar sau inregistrare, care stocheaza elementele tabelei. Sintaxa de creare a unei tabele PL/SQL este:

TYPE type_name IS TABLE OF

[NOT NULL]

[INDEX BY BINARY_INTEGER];

identifier type_name;

unde:

type_name este numele tipului TABLE.

column_type este orice tip de data scalar cum ar fi VARCHAR2, DATE sau NUMBER. Putem folosi atributul %TYPE pentru specificarea tipului coloanei.

identifier este numele unei tabele PL/SQL.

Exemplu: Declararea unei variabile care va contine un nume.

TYPE ename_table_type IS TABLE OF emp.ename%TYPE

INDEX BY BINARY_INTEGER;

ename_table ename_table_type;



Sunt doua etape ce trebuiesc realizate in crearea unei tabele PL/SQL: declararea unui tip de data TABLE si declararea unei variabile a acelui tip de data.

Deoarece dimensiunea tabelei bazei de date, si dimensiunea tabelei PL/SQL nu este constransa, numarul randurilor din tabela PL/SQL poate creste dinamic, deci tabela PL/SQL creste la adaugarea unor noi randuri.

Tabelele PL/SQL pot avea o coloana si o cheie primara, coloana poate apartine oricarui tip de data scalar sau inregistrare, dar cheia primara trebuie sa apartina tipului BINARY_INTEGER.

Referirea celui de-al treilea rand din tabela ename_table:

ename_table(3)

Exemplu:

DECLARE

TYPE ename_table_type IS TABLE OF emp.ename%TYPE

INDEX BY BINARY_INTEGER;

TYPE hiredate_table_type IS TABLE OF DATE

INDEX BY BINARY_INTEGER;

ename_table ename_table_type;

hiredate_table hiredate_table_type;

BEGIN

ename_table(1) := 'CAMERON';

hiredate_table(8) := SYSDATE + 7;

IF ename_table.EXISTS(1) THEN

INSERT INTO .

END;

Intervalul lui BINARY_INTEGER este intre -2147483647 . 2147483647, deci valoarea cheii primare poate fi si negativa.

Deoarece numai o definitie a tabelei este necesara pentru a contine informatii despre toate campurile tabelei, tabela de inregistrari creste foarte mult functionalitatea tabelelor PL/SQL.

Exemplu:   

DECLARE

TYPE dept_table_type IS TABLE OF dept%ROWTYPE

INDEX BY BINARY_INTEGER;

dept_table dept_table_type;

-- Fiecare element al dept_table este o inregistrare.

dept_table(15).loc := 'Atlanta';

-- loc reprezinta un camp din tabela DEPT.

Tabelele PL/SQL sunt mai usor de folosit apeland la urmatoarele metode: EXISTS, COUNT, FIRST si LAST, PRIOR, NEXT, EXTEND, TRIM si DELETE.

O metoda PL/SQL este o procedura sau o functie ce opereaza asupra tabelelor si poate fi apelata folosind sintaxa:

table_name.method_name[ (parameters) ]

Tabelul urmator prezinta metodele si descrierea acestora:

Metoda

Descrierea

EXISTS(n)

Returneaza TRUE daca al n-lea element din tabela PL/SQL exista.

COUNT

Returneaza numarul    de elemente pe care o tabela PL/SQL le contine.

FIRST

LAST

Returneaza primul respectiv ultimul (cel mai mic respectiv cel mai mare) numar index din tabela PL/SQL. Returneaza NULL daca tabela este goala.

PRIOR(n)

Returneaza numarul index ce precede indexul n din tabela.

NEXT(n)

Returneaza numarul index ce succede indexul n din tabela.

EXTEND(n,i)

Mareste dimensiunea tabelei.

EXTEND adauga un element NULL la tabela.

EXTEND(n) adauga n elemente NULL la tabela.

EXTEND(n, i) adauga n copii al elementului i la tabela.

EXTEND(n,i)

Mareste dimensiunea tabelei.

EXTEND adauga un element NULL la tabela.

EXTEND(n) adauga n elemente NULL la tabela.

EXTEND(n, i) adauga n copii al elementului i la tabela.

TRIM

TRIM elimina un element de la sfarsitul tabelei.

TRIM(n) elimina n elemente de la sfarsitul unei tabele.

DELETE

DELETE elimina toate elementele dintr-o tabela.

DELETE(n) elimina al n-lea element dintr-o tabela.

DELETE(m,n) elimina toate elementele din intervalul m . n dintr-o tabela.







Politica de confidentialitate





Copyright © 2023 - Toate drepturile rezervate