Extras din laborator
Tipuri de date compuse colecţie (INDEX-BY TABLE, NESTED TABLE, VARRAY)
- recapitulare
Colecţiile permit să fie prelucrate simultan mai multe variabile de acelaşi tip. Fiecare element
are un indice unic, care determină poziţia sa în colecţie.
În PL/SQL există trei tipuri de colecţii:
-tablouri indexate (index-by tables);
-tablouri imbricate (nested tables);
-vectori (varrays sau varying arrays).
Obs :
- Tipul index-by table poate fi utilizat numai în declaraţii PL/SQL. Tipurile varray şi nested table pot
fi utilizate atât în declaraţii PL/SQL, cât şi în declaraţii la nivelul schemei (de exemplu, pentru
definirea tipului unei coloane a unui tabel relaţional).
- Singura diferenţă sintactică între tablourile indexate şi cele imbricate este clauza INDEX BY. Dacă
această clauză lipseşte, atunci tipul este tablou imbricat.
- Atribute şi metode ale unei colecţii: (prezentare succintă)
Atribut sau metodă Descriere
COUNT numărul componentelor colecţiei
FIRST Indicele primului element din tablou
LAST Indicele ultimului element din tablou
EXISTS întoarce TRUE dacă există în tablou componenta cu indexul
specificat
NEXT returnează indicele următoarei componente
PRIOR returnează indicele componentei anterioare
DELETE şterge una sau mai multe componente.
EXTEND Adaugă elemente la sfârşit
LIMIT Numărul maxim de elemente al unei colecţii (pentru vectori), null
pentru tablouri imbricate
TRIM şterge elementele de la sfârşitul unei colecţii
Ultimele 3 metode nu sunt valide pentru index-by tables.
- bulk bind permite ca toate liniile unei colecţii să fie transferate simultan printr--singură operaţie.
-este realizat cu ajutorul comenzii FORALL, ce poate fi folosită cu orice tip de colecţie:
FORALL index IN lim_inf..lim_sup
comanda_sql;
Cursorul SQL are un atribut compus %BULK_ROWCOUNT care numără liniile afectate de iteraţiile
comenzii FORALL. %BULK_ROWCOUNT(i) reprezintă numărul de linii procesate de a i-a execuţie
a comenzii SQL.
- Regăsirea rezultatului unei interogări în colecţii (înainte de a fi trimisă motorului PL/SQL) se
poate obţine cu ajutorul clauzei BULK COLLECT:
…BULK COLLECT INT-nume_colecţie [,nume_colecţie]…
- Clauza poate să apară în:
-comenzile SELECT INT-(cursoare implicite),
-comenzile FETCH INT-(cursoare explicite),
-clauza RETURNING INT-a comenzilor INSERT, UPDATE, DELETE.
Exerciţii:
1. Analizaţi şi comentaţi exemplul următor. Afişaţi valorile variabilelor definite.
DECLARE
TYPE tab_index IS TABLE OF NUMBER
INDEX BY BINARY_INTEGER;
TYPE tab_imbri IS TABLE OF NUMBER;
TYPE vector IS VARRAY(15) OF NUMBER;
v_tab_index tab_index;
v_tab_imbri tab_imbri;
v_vector vector;
i INTEGER;
BEGIN
v_tab_index(1) := 72;
v_tab_index(2) := 23;
v_tab_imbri := tab_imbri(5, 3, 2, 8, 7);
v_vector := vector(1, 2);
-- afisati valorile variabilelor definite; exemplu dat pentru v_tab_imbri
i:=v_tab_imbri.FIRST;
WHILE (i <= v_tab_imbri.LAST) LOOP
DBMS_OUTPUT.PUT_LINE('v_tab_imbri: '||v_tab_imbri(i));
i:= v_tab_imbri.NEXT(i);
END LOOP;
END;
/
1. Tablouri indexate (index-by tables)
- Tabloul indexat PL/SQL are două componente:
-coloană ce cuprinde cheia primară pentru acces la liniile tabloului
--coloană care include valoarea efectivă a elementelor tabloului.
- Declararea tipului TABLE se face respectând următoarea sintaxă:
TYPE nume_tip IS TABLE OF
{tip_coloană | variabilă%TYPE |
nume_tabel.coloană%TYPE [NOT NULL] |
nume_tabel%ROWTYPE}
INDEX BY tip_indexare;
Preview document
Conținut arhivă zip
- Laborator1_BDOO_master.pdf
- Laborator2_BDOO_master.pdf
- Laborator3_BDOO_master.pdf
- Laborator4_BDOO_master.pdf