ANEXA G

Exportarea Continutului unei Tabele intr-un Fisier

Uneori este util sa avem valorile unei coloane dintr-o tabela intr-un fisier text care poate fi rulat pentru a insera respectivele valori in tabela. De exemplu cand se distribuie sau se instaleaza un sistem se doreste funniza rea unui fisier care sa contina informatiile de start-up pentru o tabela. Asemenea fisier este furnizat odata cu ORACLE pentru tabelele de demonstratie Emp, Dept si Salgrade.

Desi datele sunt existente in tabela, se poate dori existenta infor matiei in formatul "INSERT INTO nume_tabela VALUES(,,,,);" SQL din SQL poate fi utilizat pentru a indeplini aceasta. Urmatorul cod realizeaza blocul INSERT pentru tabela DEPT.



        set feed off
        set head off
        set pages 0
        set lines 75
        set verify off

        spool insert.sql

        select 'insert into dept', '     values (' ||
                deptno || ',' ||
                ''''||dname||''''||','||
                ''''||loc||''''||');'
        from dept;

        spool off

        set feed on
        set head on
        set pages 24
        set verify on

start insert.sql

Pentru fiecare linie din tabela DEPT, codul de mai sus genereaza blocurile INSERT de mai jos :


insert into dept
        values (10,'ACCOUNTING','NEW YORK');

insert into dept
        values (20,'RESEARCH','DALLAS');
insert into dept
        values (30,'SALES','CHICAGO');
insert into dept
        values (40,'OPERATIONS','BOSTON');

Aceste blocuri au fost "capturate" in fisierul "INSERT.SQL".

Poate ca ati observat numarul mare de apostrofuri din ultimul exemplu. Un set de 4 apostrofuri genereaza un singur apostrof in blocul final - RETINETI : Sirurile de caractere trebuie incadrate de apostrofuri !



        Astfel :

        SELECT '''X'''            intoarce 'X'
        SELECT ''''               intoarce '
        SELECT ''''||DNAME||''''  intoarce 'BOSTON'

SQL din SQL este o tehnica ce poate fi utilizata pentru a mari tabelele cu valori stocate in fisiere text. De asemeni pot fi folosite utilitarele IMPORT/EXPORT.

Generarea unor blocuri INSERT pentru o tabela cu multe coloane este costisitor sa generam coloana cu coloana. In loc, putem extrage informatia din "Data Dictionary".

Intr-adevar, cand se genereaza SQL bazat pe date existente, "Data Dictionary" este locul de start. Se poate utiliza acest dictionar pentru a furniza parametrii pentru orice bloc SQL. Urmatorul exeplu utilizeaza infor- matia din "Data Dictionary" pentru a genera blocuri CREATE TABLE pentru fiecare tabela a utilizatorului. Acest exemplu ilustreaza cateva tehnici necesare pentru generarea unui SQL complex. SA NU VA INGRIJORATI CA VA TREBUI SA UTILI- ZATI ACEST COD DE FIECARE DATA CAND DORITI SA EXECUTATI UN BACK-UP AL TABE- LELOR DUMDEAVOASTRA ! ORACLE FURNIZEAZA ALTE UTILITARE CARE EXECUTA ACEST LUCRU.

Crearea Tabelelor.

Este mereu o idee buna sa fiti capabili sa regenerati propriile tabele. Puteti sa lasati SQL sa genereze blocuri CREATE TABLE pentru aceasta. Ecranul "Data Dictionary" - user_tab_columns - contine tiate informatiile necesare.


        SELECT TABLE_NAME, COLUMN_ID, COLUMN_NAME, DATA_TYPE, DATA_LENGHT,
        DATA_PRECISION, DATA_SCALE, NULLABLE
        FROM USER_TAB_COLUMNS
        WHERE TABLE_NAME IN ('DEPT','EMP','SALGRADE')
        ORDER BY TABLE_NAME, COLUMN_ID;


TABLE_NAME COLUMN_ID COLUMN_NAME DATA_T DATA_LEN DATA_PREC DATA_SCALE NULLABLE
---------- --------- ----------- ------ -------- --------- ---------- --------
DEPT            1       DEPTNO   NUMBER      22         2       0       N
DEPT            2       DNAME    CHAR        14                         Y
DEPT            3       LOC      CHAR        13                         Y
EMP             1       EMPNO    NUMBER      22         4       0       N
EMP             2       ENAME    CHAR        10                         Y
EMP             3       JOB      CHAR         9                         Y
EMP             4       MGR      NUMBER      22         4       0       Y
EMP             5       HIREDATE DATE         7                         Y
EMP             6       SAL      NUMBER      22         7       2       Y
EMP             7       COMM     NUMBER      22         7       2       Y
EMP             8       DEPTNO   NUMBER      22         2       0       N
SALGRADE        1       GRADE    NUMBER      22                         Y
SALGRADE        2       LOSAL    NUMBER      22                         Y
SALGRADE        3       HISAL    NUMBER      22                         Y