In acest capitol secund al Limbajului de Definire a Datelor vom vedea comenzile pentru modificarea si mutarea tabelelor si constrangerilor lor. Deasemenea, vom vedea cum informatii despre baza de date pot fi extrase din Dictionarul de Date.
Folositi comanda ALTER TABLE pentru a schimba definitia unei tabele.
Sintaxa:
ALTER TABLE nume-tabela [ ADD ](specificator coloana[constrangere de coloana])[ENABLE clauza ] [MODIFY ] [DISABLE clauza] [DROP optiuni]
Folositi cuvantul cheie ADD pentru a adauga o coloana si/sau constran- geri pentru o tabela existenta. Pentru a adauga o coloana tabelei EMP care va tine numele sotului angajatului, introduceti:
ALTER TABLE EMP
ADD (SPOUSES_NAME CHAR (10));
Table altered.
Pentru a vedea descrierea tabelei revizuite, introduceti:
DESCRIBE EMP;
Pentru a adauga o constrangere de tabela unei tabele existente, care specifi- ca daca salariul lunar nu trebuie sa depaseasca 5000$, introduceti:
ALTER TABLE EMP
ADD(CHECK(SAL <=5000));
,/pre>
Clauza MODIFY
Folositi cuvantul cheie MODIFY pentru a modifica definitia unei coloane
existente.
ALTER TABLE nume
MODIFY (tip coloana [NULL])
Pentru a schimba lungimea lui ENAME la 25 de caractere, introduceti :
ALTER TABLE EMP
MODIFY (ENAME CHAR (25));
Table altered.
DESCRIBE EMP;
Sunt 4 schimbari pe care nu le puteti face
- Nu puteti schimba o coloana continand null-uri din NULL in NOT NULL.
- Nu puteti adauga o noua coloana care este NOT NULL. Faceti-o null, um-
pleti-o complet si apoi schimbati-o in NOT NULL.
- Nu puteti sa scadeti dimensiunea unei coloane sau sa-i schimbati tipul de
date, numai daca nu contine date.
- Nu puteti folosi optiunea MODIFY pentru a defini constrangeri pe o coloana
exceptand NULL/NOT NULL.
Pentru a modifica alte constrangeri trebuie sa le eliminati si apoi sa le a-
daugati specificand modificarile.
Clauza DROP
Folositi clauza DROP pentru a muta o constrangere din alta tabela.
Sintaxa:
ALTER TABLE nume tabela
DROP [CONSTRAINT nume constrangere ] [CASCADE]
[PRIMARY KEY ]
[UNIQUE (coloana, coloana, ...)]
De exemplu:
ALTER TABLE EMP
DROP CONSTRAINT EMP_MGR;
ALTER TABLE EMP
DROP PRIMARY KEY;
Optiunea CASCADE (in clauza DROP)
Optiunea CASCADE a clauzei DROP face ca orice constrangere dependenta
sa fie deasemenea eliminata.
De exemplu:
ALTER TABLE DEPT
DROP PRIMARY KEY CASCADE;
ar putea deasemenea sa faca ca constrangerea chaii exetrne din EMP>DEPTNO sa
fie eliminata.
Clauza ENABLE/DISABLE
Aceasta clauza a comenzii ALTER TABLE permite constrangerilor sa fie fa-
cute posibile sau dezactivate fara a le elimina sau recrea.
Sintaxa:
[DISABLE] [ UNIQUE (coloana, coloana, ...) ] [CASCADE]
[ENABLE ] [ PRIMARY KEY ]
[ CONSTRAINT nume constrangere ]
Ca si la clauza DROP, adaugarea cuvantului cheie CASCADE semnifica ca con-
strangerile dependente sunt deasemenea afectate.
De exemplu:
ALTER TABLE DEPT
DISABLE CONSTRAINT DEPT_PRIM CASCADE;
Alte comenzi LDD
Eliminarea unei tabele
Pentru a sterge definitia unei tabele ORACLE, folositi comanda DROP
TABLE.
Sintaxa:
DROP TABLE nume tabela [CASCADE CONSTRAINTS]
De exemplu:
DROP TABLE EMP;
Stergerea unei tabele duce la pierderea tuturor datelor din ea si a tu-
turor indecsilor asociati ei. Optiunea CASCADE CONSTRAINTS va sterge deaseme-
nea referirile la constrangerile de integritate dependente.
Note:
Folositi comanda COMMENT pentru a insera un comentariu pana la 255 de caractere, despre o tabela sau coloana, in dictionarul de date.
Pentru a adauga un comentariu unei tabele numita EMP, introduceti:
COMMENT ON TABLE EMP IS 'Employee Information';
Pentru a adauga un comentariu pe coloana EMPNO in tabela EMP, introduceti:
COMMENT ON COLUMN EMP.EMPNO IS 'Unique employee number';
Pentru a sterge un comentariu, emiteti comanda COMMENT fara un comentariu:
COMMENT ON COLUMN EMP.EMPNO IS ''; ,/pre>Pentru a vedea comentariul, selectati coloana COMMENTS din una din vederile dictionarului:ALL_COL_COMMENTS sau USER_COL_COMMENTS. Dictionarul de Date este acoperit mai tarziu in acest capitol.
Comanda RENAME
Comanda RENAME este folosita de creatorul lui TABLES, VIEWS si SYNONYMS pentru a scimba numele obiectului bazei de date.
Pentru a redenumi un obiect al bazei de date sintaxa este:
RENAME vechi TO nou;Pentru a redenumi tabela EMP in EMPLOYEE, introduceti:
RENAME EMP TO EMPLOYEE;Pentru a redenumi tabela SALGRADE, introduceti:
RENAME SALGRADE TO EMPLOYEE_GRADES;Este important de notat ca orice aplicatii/programe/rapoarte care se refera la obiecte ce au fost redenumite, trebuie amendate.
Comanda TRUNCATE TABLE
Aceasta comanda va permite sa stergeti toate liniile dintr-o tabela. No- tati ca comanda DELETE poate deasemenea realiza aceasta ca o parte a tran- zactiei de manipulare a datelor (acoperita in capitolul urmator), dar comanda TRUNCATE TABLE umple o tabela mai eficient ca o actiune de definire de date, pana cand nu este retinuta nici o informatie de rollback.
Sintaxa:
TRUNCATE TABLE nume tabela [REUSE STORAGE]Optiunea REUSE STORAGE pastreaza spatiul din liniile sterse pentru reutiliza- rea tabelei. Implicit, acest spatiu este eliberat.
Dictionarul de Date Oracle
Dictionarul de Date este una din partile cele mai importante ale lui ORACLE RDBMS. Consta dintr-un set de tabele si vederi care furnizeaza un ghid de referinta accesibil doar la citire, despre baza de date. Dictionarul de Date va va spune:
Dictionarul de Date este creat cand este creata baza de date. Oricand baza de date este in operatii, Dictionarul de Date este actualizat de ORACLE RDBMS.
Dictionarul de Date este o referinta pentru toti utilizatorii bazei de date. Este o sursa valoroasa de informatii pentru utilizatori, proiectanti de aplicatii si DBA. Dictionarul de Date este deasemenea critic pentru operatia ORACLE RDBMS, care il reaseaza pentru a inregistra si verifica informatii despre baza de date.
Accesul la obiectele Dictionarului de Date este prin SQL. Declaratiile SELECT pot fi folosite pentru a cere informatii din Dictionarul de Date.
Nici un utilizator nu ar trebui sa schimbe vreodata (insereze, actualizeze
sau stearga) nici o linie sau obiect in Dictionarul de Date, este probabil sa
compromita integritatea datelor. RDBMS actualizeaza automat Dictionarul de
Date pentru a reflecta schimbarile structurii bazei de date, permisiuni, re-
vizii si alte date. In timpul operatiei bazei de date, RDBMS citeste dease-
menea Dictionarul de Date pentru a descoperi obiectele care exista si ca uti-
lizatorii sa aiba acces la ele.
Tabelele si vederile Dictionarului de Date
Baza Dictionarului de Date sau fundamentul tabelelor sunt primele o- biecte ce trebuie create in baza de date, pentru ca ele trebuie sa fie pre- zente pentru toate obiectele ce trebuie create. Tabelel Dictionarului de Date sunt create automat de declaratia SQL CREATE DATABASE si nu sunt in posesia utilizatorului SYS. Tabelele de baza sunt rareori accesate direct, deoarece informatia din ele nu este usor de inteles.
Vederile Dictionarului de Date (tabele virtuale - acoprite in capitolul 15) contin informatii intr-o forma care este usor de inteles pentru utiliza- tor. Accesul public la Dictionarul de Date este dat prin vederi mai degraba decat prin tabele de baza. SYS poseda deasemenea vederile Dictionarului de Date.
Vederile au fost numite pentru a reflecta tipul de utilizare dorit. Ve- derile sunt clasificate in 3 grupe distingandu-se intre ele prin prefixele USER, ALL si DBA.
Cele trei clase de vederi sunt:
Unele dintre vederile Dictionarului de Date nu utilizeaza prefixele lis- tate mai sus. Aceste vederi includ:
DICTIONARY listeaza toate obiectele Dictionarului de Date accesibile u- tilizatorului cu o scurta descriere a obiectului.
Urmatoarea declaratie SQL afiseaza continutul tabelei DICTIONARY :
SELECT *
FROM DICTIONARY;
Multe din vederile Dictionarului de Date au nume lung. Sinonimele publice au fost furnizate, ca abreviatii, pentru accesul convenabil la unele din cele mai comune vederi ale Dictionarului de Date utilizator.
Numele Tabelei Comentarii
-------------- ----------
ALL_CATALOG Toate tabelele, vederile, sinonimele, secven-
tele accesibile utilizatorului
ALL_COL_COMMENTS Comentarii pe coloanele tabelelor si vederi-
le accesibile
ALL_COL_PRIVS Permisiuni pe coloanele pentru care utiliza-
torul este "grantor", "grantee", proprietar,
sau un rol posibil sau PUBLIC este "grantee"
ALL_COL_PRIVS_MADE Permisiuni pe coloanele pentru care utiliza-
e proprietar sau "grantor"
ALL_COL_PRIVS_RECD Permisiuni pe coloanele pentru care utiliza-
torul, PUBLIC sau rolul posibil este "gran-
tee"
ALL_CONSTRAINTS Definitii de constrangeri pe tabele accesi-
bile
ALL_CONS_COLUMNS Informatii despre coloanele accesibile in
definitiile de constrangeri
ALL_DB_LINKS Legaturile bazei de date accesibile utiliza-
torului
ALL_DEF_AUDIT_OPTS Optiuni de revizuire pentru noile obiecte
create
ALL_DEPENDENCIES Dependente dinspre si inspre obiectele acce-
sibile utilizatorului
ALL_ERROR Erorile curente pe obiectele stocate la care
utilizatorul este permis sa creeze
(pag. 13-13)
ALL_INDEXES Descrierea indecsilor pe tabelele accesibile
utilizatorului
ALL_IND_COLUMNS Coloanele cuprinzand indecsi pe tabele acce-
sibile
ALL_OBJECTS Obiectele accesibile utilizatorului
ALL_SEQUENCES Descrierea SEQUENCE-urilor accesibile utili-
zatorului
ALL_SNAPSHOTS Instantanee la care poate privi utilizatorul
ALL_SOURCE Sursa curenta a obiectelor create pe care u-
tilizatorul are permisiunea sa le creeze
ALL_SYNONYMS Toate sinonimele accesibile utilizatorului
ALL_TABLES Descrierea tabelelor accesibile utilizatoru-
lui
ALL_TAB_COLUMNS Coloanele tuturor tabelelor, vederilor si
clusterelor
ALL_TAB_COMMENTS Comentarii pe tabele si vederi accesibile u-
tilizatorului
ALL_TAB_PRIVS Permisiuni pe obiecte pentru care utilizato-
rul e "grantor", "grantee" sau proprietar,
sau un rol posibil sau PUBLIC garantie
ALL_TAB_PRIVS_MADE Permisiunile utilizatorilor si permisiuni pe
obiectele utilizatorilor
ALL_TAB_PRIVS_RECD Permisiuni pe obiecte pentru care utilizato-
rul, PUBLIC sau un rol posibil este "gran-
tee"
ALL_TRIGGERS TRIGGER-uri accesibile utilizatorului curent
ALL_TRIGGER_COLS Utilizarea coloanelor in trigger-ul utiliza-
torilor sau in trigger-uri pe tabelele uti-
lizatorilor
ALL_USERS Informatii despre toti utilizatorii bazei de
date
ALL_VIEWS Textul vederilor accesibile utilizatorilor
AUDIT_ACTIONS Tabela de descriere pentru actiunea de urma-
rire a reviziei tipului de coduri
CAT Sinonim cu USER_CATALOG
CLU Sinonim cu USER_CLUSTERS
COLS Sinonim cu USER_TAB_COLUMNS
COLUMN_PRIVILEGES Permisiuni pe coloane pentru care utilizato-
rul e "grantor", "grantee", proprietar, sau
un rol posibil sau PUBLIC este "grantee"
DICT Sinonim cu DICTIONARY
DICTIONARY Descrierea tabelelor si vederilor Dictiona-
rului de Date
GLOBAL_NAME Numele bazei de date globale
IND Sinonim pentru USER_INDEXES
INDEX_HISTOGRAM Statistica pe chei cu numarare repetata
INDEX_STATS Statistica pe arbori-B
OBJ Sinonim pentru USER_OBJECTS
RESOURCE_COSTS Costul fiecarei resurse
ROLE_ROLE_PRIVS Roluri permise rolurile
ROLE_SYS_PRIVS Privilegiile sistem permise rolurilor
ROLE_TAB_PRIVS Privilegii de tabela permise rolurilor
SEQ Sinonim pentru USER_SEQUENCES
SESSION_PRIVS Privilegii pe care utilizatorul le-a setat
in mod curent
SESSION_ROLES Roluri pe care utilizatorul le-a facut posi-
bile in mod curent
SYN Sinonim pentru USER_SYNONYMS
TABLE_PRIVILEGES Alocatii pe obiecte pe care utilizatorul
este "grantor", "grantee", posesor, sau un
rol facut posibil, sau PUBLIC este "gran-
tee-ul"
TABS Sinonim pentru USER_TABLES
USER_AUDIT_OBJECTS Inregistrarea urmelor examinate pentru de-
claratii referitoare la obiecte, si anume:
tabel, cluster, vedere, index, secventa,
legatura bazei de date [publica], sinonim
[public], procedura, trigger, segment roll-
back, spatiu de tabela, rol, utilizator
USER_AUDIT_SESSION
USER_AUDIT_STATEMENT Inregistrarea urmelor examinate referitoare
la alocatie, anulare, examinare, neexamina-
re si sistem modificat
USER_AUDIT_TRAIL Intrari ale urmelor revizuite, relevante u-
tilizatorului
USER_CATALOG Tabele, vederi, sinonime si secvente poseda-
te de utilizator
USER_CLUSTERS Descrieri ale clusterelor utilizatorului
USER_CLU_COLUMNS Maparea coloanelor tabelei pentru a aduna
impreuna coloanele
TABLENAMECOMMENTS
USER_COL_COMMENTS Comentarii despre coloanele tabelelor si ve-
derile utilizatorului
USER_COL_PRIVS Permisiuni pe coloanele pentru care utiliza-
torul este posesorul, "grantor" sau "gran-
tee"
USER_COL_PRIVS_MADE Toate permisiunile pe coloanele obiectelor
posedate de utilizator
USER_COL_PRIVS_RECD Permisiuni pe coloane pentru care utilizato-
rul este "grantee"
USER_CONSTRAINTS Definitiile constrangerilor pe tabelele uti-
lizatorului
USER_CONS_COLUMNS Informatii despre coloanele accesibile in
definitiile constrangerilor
USER_DB_LINKS Legaturile bazei de date posedate de utili-
zator
USER_DEPENDENCIES Dependente dinspre si inspre obiectele uti-
lizatorilor
USER_ERRORS Erori curente pe obiecte stocate, posedate
de utilizator
USER_EXTENTS Extensii cuprinzand segmente ale utilizato-
rului
USER_FREE_SPACE Extensii libere in spatiul tabelelor accesi-
bile utilizatorului
USER_INDEXES Descrierea indecsilor utilizatorului
USER_IND_COLUMNS Coloanele cuprinzand indecsi ai utilizatoru-
lui sau pe tabele ale utilizatorului
USER_OBJECTS Obiecte posedate de utilizator
USER_OBJECT_SIZE Dimensiuni, in octeti, a diferitelor obiecte
pl/sql
USER_OBJ_AUDIT_OPTS Optiuni de revizuire pentru tabelele si vede-
rile utilizatorului
USER_RESOURCE_LIMITS Afiseaza limita resurselor utilizatorului
USER_ROLE_PRIVS Roluri permise utilizatorului curent
USER_SEGMENTS Spatiu de stocare alocat pentru segmentele
bazei de date
USER_SEQUENCES Descrierea SEQUENCE-lor utilizatorului
USER_SNAPSHOTS Instantanee pe care utilizatorul le poate ve-
dea
USER_SNAPSHOTS_LOGS Toate jurnalele instantanee posedate de uti-
lizator
USER_SOURCE Sursa obiectelor stocate accesibile utiliza-
torului
USER_SYNONYMS Sinonimele private ale utilizatorului
USER_SYS_PRIVS Privilegii de sistem permise utilizatorului
curent
USER_TABLES Descrierea tabelelor utilizatorului
USER_TABLESPACES Descrierea spatiilor tabelelor accesibile
USER_TAB_COLUMNS Coloane ale tabelelor, vederilor si clustere-
lor utilizatorului
USER_TAB_COMMENTS Comentarii despre tabelele si vederile pose-
date de utilizator
USER_TAB_PRIVS Permisiuni pe obiecte pentru care utilizato-
rul este posesorul, "grantor-ul", sau "gran-
tee-ul"
USER_TAB_PRIVS_MADE Toate permisiunile pe obiecte posedate de u-
tilizator
USER_TAB_PRIVS_RECD Permisiuni pe obiecte pentru care utilizato-
rul este "grantee-ul"
USER_TRIGGERS Tigger-uri posedate de utilizator
USER_TRIGGER_COLS Folosirea coloanei in trigger-ul utilizatoru-
lui
USER_TS_QUOTAS Cota spatiului de tabela pentru utilizator
USER_USERS Informatii despre utilizatorul curent
USER_VIEWS Text de vederi posedat de utilizator
Urmatoarele vederi sunt probabile de a fi de interes pentru majoritatea utilizatorilor:
Nume vedere Sinonim Descriere
----------- ------- ----------
DICTIONARY Dict Lista tuturor obiectelor bazei de date
USER_OBJECTS Obj Obiectele posedate de utilizator
USER_CATALOG Cat Tabele, vederi, sinonime, secvente accesi-
bile utilizatorului
USER_TABLES Tabs Descrierea tabelelor utilizatorului
USER_TAB_COLUMNS Cols Coloanele din tabelele si vederile utili-
zatorului
USER_COL_COMMENTS Comentarii pe coloanele tabelelor si vede-
rilor utilizatorului
USER_TAB_COMMENTS Comenzi pe tabele si vederi posedate de u-
tilizator
USER_SEQUENCES Seq Descrierea secventelor posedate de utili-
zator
USER_SYNONYM Syn Sinonimul privat al utilizatorului
USER_VIEWS Textul vederilor posedate de utilizator
USER_INDEXES Ind Descrierea indecsilor proprii utilizatoru-
lui
ALL_OBJECTS Obiectele accesibile utilizatoruluI
ALL_TAB_COLUMNS Coloanele pentru toate tabelele si vederi-
le accesibile utilizatorului
Daca nu stiti definitia unei tabele sau vederi a Dictionarului de Date, sau daca nu va puteti aminti numele unei coloane intr-o tabela/vedere specifica, atunci folositi comanda DESC[RIBE] pentru a afisa definitia tabelei/vederii.
Pentru a vedea structura lui USER_OBJECTS, introduceti:
SQL>desc user_objects
O descriere a vederii DICTIONARY urmeaza:
SQL>desc dict
Notati ca sinonimul abreviat DICT poate fi folosit cu referire la DICTIONARY. Odata ce stiti structura unei tabele/vederi, puteti selecta informatia dori- ta:
SELECT OBJECT_NAME, OBJECT_TYPE, CREATED
FROM USER_OBJECTS
WHERE OBJECT_NAME = 'EMP'
SQL poate fi o unealta puternica pentru a genera alte declaratii SQL, facand folosirea informatiei in Dictionarul de Date. Puteti folosi SQL din SQL pentru:
Amintiti-va, virtual puteti selecta orice.
De exemplu, pentru a genera declaratii SQL*PLUS pentru a descrie toate tabelele voastre, folositi urmatorul SQL:
SELECT 'DESC '||OBJECT_NAME
FROM USER_OBJECTS
WHERE OBJECT_TYPE = 'TABLE'
/
OR
SELECT 'DESC '||TABLE_NAME
FROM USER_TABLES;
Exemplele de mai sus genereaza urmatoarea iesire:
DESC DEPT
DESC EMP
DESC SALGRADE
Pentru a executa declaratiile de mai sus, este necesara capturarea lor intr-un fisier care poate fi pornit.
SET ECHO OFF
SET PAGES 0
SET FEEEDBACK OFF
SPOOL X
SELECT 'DESC '||TABLE_NAME
FROM USER_TABLES
/
SPOOL OFF
START X.LIS
In exemplul de mai susm PAGE[SIZE] este pus pe 0, pentru a elimina titlurile
din varf si de jos, ca si cele de tabel. Notati deasemenea ca extensia LIS
este specificata pe comanda START, deoarece START isi asuma o extensie a SQL.
Exemple mai sofisticate ale acestei tehnici sunt detailate in Apendicele G,
unde cererile din Dictionarul de Date sunt folosite pentru a produce comenzi
DML si DDL si iesire.
CAPITOLUL 13 Exercitii - Managementul de tabela si Dictionarul de Date
ALTER TABLE PROJECTS
ADD (COMMENTS LONG)
ALTER TABLE ASSIGNMENTS
ADD (HOURS NUMBER)
SELECT OBJECT_NAME, OBJECT_TYPE
FROM USER_OBJECTS
ALTER TABLE ASSIGNMENTS
ADD CONSTRAINT UNQ_KEY UNIQUE (PROJID,EMPNO)
SELECT CONSTRAINT_NAME, CONSTRAINT_TYPE, TABLE_NAME
SEARCH_CONDITION
FROM USER_CONSTRAINTS
SELECT OWNER, TABLE_NAME
FROM ALL_TABLES
WHERE TABLE_NAME LIKE '%EMP%'