Denne artikel forbliver med samme overskrift, over de næste par emner. Det er fordi at emnerne bl.a. er omkring Oracle's nestede tabel strukturer, objekter, varray's m.fl. Og hver især, er et emne for sig selv. Så for det ikke skal blive alt for uoverskueligt, har jeg delt det op. Vi starter med Oracle's nestede tabeller.
Oracle selv introducerede deres "relationelle model", tilbage i version 8i, med nestede tabeller og varray's. Forinden, i version 7 kom grundstenene, nemlig PLSQL tabeller og records. Navngivningen ændrede sig også løbende for samme ting.
- Version 7 PLSQL TABEL
- Version 8 Index-by tabeller
- Version 9 Associative Arrays
Dog; er der visse features og nye ting i de forskellige versioner som vi vil se.
Oracle 10G er dog, det helt store vendepunkt, hvor vi må gentænke, hvordan vores opsætninger ser ud, de-normalisere og inplementere de nye typer. 10G byder på så mange nye typer, eller features om du vil. Et godt eksempel er; at med PLSQL har man jo nok i stor grad, indtil 9i været vant til at hente data by-row, og afhængigt af mængde, tager det jo den tid det tager.
Med BULK COLLECT kan alt hentes på en læsning, med collection-level sammenligning kan du udpege de rækker du skal gøre yderligere ved, med set operatorer kan du spare mange liniers kode og mange timers test. Dette er blot et par af de ting der bydes på.
Nedenstående er; Dictionary data information, definition, eksempler på insert, update og delete m.v. Det er simpelthen den praktiske del vedr. nestede tabeller.
"En nested tabel er en tabel gemt inde i strukturen af en anden tabel, i databasen." | |||||||||||||||||||
Data Dictionary Objekter | colletion$ tab$ type$
|
||||||||||||||||||
System Priviledger | CREATE TYPE CREATE ANY TYPE DROP ANY TYPE CREATE TABLE CREATE ANY TABLE DROP ANY TABLE |
||||||||||||||||||
Nested Tabel Eksempel | CREATE TYPE genres_tab IS TABLE OF book_genre.genre_name%TYPE; / CREATE TABLE book_library ( library_id NUMBER, name VARCHAR2(30), book_genres_tab genres_tab) NESTED TABLE book_genres_tab STORE AS genres_table; / SELECT table_name, nested FROM user_tables; set linesize 121 col table_name format a20 col data_type format a30 col table_type_name format a15 col parent_table_column format a10 SELECT column_name, data_type, data_length FROM user_tab_columns WHERE table_name = 'BOOK_LIBRARY'; SELECT table_name, table_type_owner, table_type_name, parent_table_column FROM user_nested_tables; |
||||||||||||||||||
Insert into en Nested Tabel |
INSERT INTO book_library (library_id, name, book_genres_tab) |
||||||||||||||||||
Update en nested tabel | DECLARE updated_genres_tab genres_tab; BEGIN updated_genres_tab := genres_tab('FICTION','NON-FICTION','HISTORY','BUSINESS AND FINANCE', 'SCIENCE','PERIODICALS','MULTIMEDIA'); UPDATE book_library SET book_genres_tab = updated_genres_tab; END; / SELECT * FROM book_library; |
||||||||||||||||||
Drop en nested tabel |
SELECT table_name "Du kan ikke bare droppe en nested tabel. Istedet for må du først benytte ALTER TABLE .... DROP COLUMN." |
||||||||||||||||||
"Table Unnesting" | |||||||||||||||||||
Collection Unnesting Demo |
"For at kunne operere på collection elementer, kan der benyttes TABLE funktionen." 1. SELECT column_value FROM TABLE(SELECT book_genres_tab FROM book_library WHERE name = 'Brand New Library') WHERE column_value LIKE '%FICTION%'; / COLUMN_VALUE ------------------------------ FICTION NON-FICTION 2. UPDATE TABLE(SELECT book_genres_tab FROM book_library WHERE name = 'Brand New Library') SET column_value = 'MUSIC AND FILM' WHERE column_value = 'MULTIMEDIA'; 3. SELECT column_value FROM TABLE(SELECT book_genres_tab FROM book_library WHERE name = 'Brand New Library'); COLUMN_VALUE ------------------------------ FICTION NON-FICTION HISTORY BUSINESS AND FINANCE SCIENCE PERIODICALS MULTIMEDIA Det første udtryk, henter blot individuelle elementer fra vores nestede tabel book_genes_tab i vores book_library database tabel. Det andet udtryk foretager en individuel opdatering, noget der kun er muligt med nestede tabeller. Det tredie og sidste udtryk viser en select af alle elementer i den nestede tabel. Dette viser en vigtig funktion af TABLE opereanden. Tidligere kunne man via VARRAY få retuneret en komma seperaretliste af elementer. Ved at benytte TABLE kan elementer "Un-nestes" og data vises som ved en "normal" tabel, top-down.
|