Differences

This shows you the differences between two versions of the page.

Link to this comparison view

bd:laboratoare:10 [2019/02/17 00:17]
fbratiloveanu removed
bd:laboratoare:10 [2020/02/18 21:44] (current)
iulia.radulescu created
Line 1: Line 1:
-===== Laboratorul ​10=====+===== Laborator ​10 - Crearea, definirea, modificarea și ștergerea obiectelor din baza de date =====
  
  
 +**Conținut**
 +
 +  * Crearea unui tabele
 +  * Crearea unei tabele printr-o cerere select
 +  * Constrângeri de integritate
 +  * Comanda ALTER TABLE
 +  * Comanda DROP TABLE
 +  * Comanda TRUNCATE
 +  * Comenda INSERT
 +  * Comanda UPDATE
 +  * Comanda DELETE
 +  * Comenzile COMMIT și ROLLBACK
 +  * SEQUENCE
 +  * INDEX
 +  * VIEW
 +  * Alte comenzi
 +
 +==== Crearea unei tabele ====
 +
 +
 +Comenzile pentru crearea și definirea de structuri tabelare sunt comenzi de definire a datelor **(Data Definition Language - <color green>​DDL</​color>​)** și permit crearea dar și relaționarea lor într-o bază de date.
 +Structura unei tabele este data de următoarele specificații de definire:
 +  * Definirea coloanelor
 +  * Definirea constrângerilor de integritate
 +  * Definirea tablespace-ului unde se creeaza
 +  * Definirea parametrilor
 +
 +Sintaxa
 +<code sql>​CREATE TABLE [ schema.]table_name [table_constraint]
 + column datatype [DEFAULT expr] [column_constraints]
 + [table_constraints] [TABLESPACE tablespace]
 + [storage parameters]
 + [ENABLE|DISABLE CLAUSE] [AS subquery]</​code>​
 +
 +[[https://​docs.oracle.com/​database/​121/​SQLRF/​statements_7002.htm#​SQLRF01402|Sintaxa completă]]
 +
 +
 +  * **schema** – este schema unde se creează tabela (specifică utilizatorul și baza de date)
 +  * **tabel_name** – este numele tabelei
 +  * **column** – este numele coloanei
 +  * **datatype** – reprezintă tipul coloanei
 +  * **DEFAULT expr** – specifică valoarea implicită a coloanei
 +  * **column_constraint** – definește constrângerile de integritate pe coloană
 +  * **tablespace** - specifică în ce tablespace al bazei de date se creează tabela
 +  * **storage_parameters** - definește parametrii de creare și pot fi:
 +    * PCTFREE - procentaj de spațiu rezervat pentru update
 +    * PCTUSED - procentaj minim folosit pentru un bloc de date
 +    * INITRANS - numărul inițial de tranzacții pentru fiecare bloc (1-255)
 +    * MAXTRANS - numărul maxim de tranzacții concurente (1-255)
 +    * CLUSTER - specifică dacă tabela face parte dintr-un cluster
 +  * **ENABLE/​DISABLE clause** - activare / dezactivare de constrângeri
 +  * **AS subquery** - inserare de date dintr-o altă tabelă obținute printr-o interogare
 +
 +<note tip>​**Opțiunea DEFAULT**
 +Este folosită pentru a da o valaore implicită unei coloane.
 +Previne apariția de valori NULL atunci când o linie este inserată fără o valoare din coloană.
 +Valorile implicite pot fi șiruri de caractere, numere, și funcții dar nu poate conține numele unei alte coloane.</​note>​
 +
 +{{ :​bd:​laboratoare:​lab10_1_carbon.png?​500 |}}
 +
 +Tipurile de date care pot fi asociate coloanelor unei tabele pot fi :
 +  * tipuri numerice
 +  * tipuri alfanumerice
 +  * tipuri pentru data calendaristică și timp
 +  * tipuri compuse (matrice sau tabelă)
 +
 +Câteva dintre cele mai uzuale tipuri de date sunt:
 +  * **NUMBER** - număr real de dimensiune variabilă (maxim 38 cifre)
 +  * **NUMBER(n)** - număr întreg de n cifre
 +  * **NUMBER(n,​m)** - număr real de n cifre, dintre care m zecimale
 +  * **CHAR(n)** - șir de caractere de lungime fixă n (1-2000)
 +  * **NCHAR(n)** - analog cu CHAR, dar poate stoca șiruri de caractere Unicode
 +  * **VARCHAR2(n)** - șir de caractere de lungime variabilă n
 +  * **NVARCHAR2(n)** - analog cu VARCHAR dar poate stoca șiruri de caractere Unicode
 +  * **LONG** - șir de caractere de maxim 2 la puterea 31 octeți
 +  * **LONG RAW** - similar cu LONG dar conține date binare
 +  * **ROWID** - poate stoca identificatorul unei linii din tabelă
 +  * **DATE** - data calendaristică
 +  * **TIMESTAMP(n)** - extensie pentru tipul DATE care conține și fracțiuni de secundă pe n zecimale
 +
 +**Reguli pentru crearea unei tabele:**
 +  * Userul trebuie să aibă drepturi de crearea a unei tabele.
 +  * Numele trebuie să fie unic în contul în care se creeaza și nu este case sentitive.
 +  * Numele trebuie să aibă maxim 30 de caractere continue, să înceapă cu o literă și să nu fie cuvânt rezervat Oracle.
 +  * O tabelă poate fi creată oricând dar nu poate fi alterată când este accesată de un alt user.
 +  * La creare nu este necesar să se specifice dimensiunea tabelei dar trebuie estimat ce spațiu va ocupa în tablespace.
 +  * Structura tabelelor poate fi modificată și ulterior (prin adăugarea sau ștergerea coloanelor, constrângerilor,​ indecși, etc.).
 +  * Dacă dimensiunea ințială este insuficientă i se alocă automat mai mult spațiu în limita tablespace-ului (care la rândul lui poate fi extins cu un nou data file).
 +
 +<color red>Ex. 1.</​color>​ Să se creeze o tabelă pentru evindența studentilor.
 +
 +{{ :​bd:​laboratoare:​lab10_2_carbon.png?​500 |}}
 +
 +**Crearea unei tabele printr-o cerere select**
 +
 +Sunt două posibilități de crea o tabelă folosind o astfel de construcție:​
 +  * Comanda CREATE TABLE nu conține descrierea structurii tabelare.
 +  * Comanda CREATE TABLE conține descrierea structurii tabelare.
 +
 +**Comanda CREATE TABLE nu conține descrierea structurii tabelare:**
 +
 +  * Se creează o tabelă cu o structură identică cu câmpurile specificate în cererea SELECT.
 +  * **Tipurile coloanelor se păstrează.**
 +  * **Dacă cererea conține o expresie sau funcție trebuie să i se atribuie un alias valid.**
 +  * Noua tabelă **nu moștenește nicio constrângere de integritate de la vechile tabele, cu excepția NOT NULL**.
 +
 +
 +<color red>Ex. 2.</​color>​ Să se creeze o tabelă care va conține veniturile angajațiilor din departamentul 20.
 +
 +{{ :​bd:​laboratoare:​lab10_3_carbon.png?​500 |}}
 +
 +**
 +Comanda CREATE TABLE conține descrierea structurii tabelare:**
 +
 +  * Numărul coloanelor **trebuie să coincidă** cu numărul coloanelor din cererea ​ SELECT.
 +  * Nu se va specifica tipul coloanelor.
 +  * Nu se pot specifica tipuri de coloane în comandă.
 +  * **Se poate adăuga constrângerea NOT NULL și opțiunea DEFAULT în comandă.**
 +  * Dacă cererea conține o expresie sau funcție **nu trebuie să i se atribuie un alias** deoarece **definirea coloanei respective este impusă de comandă** și nu de cerere.
 +  * Noua tabelă nu moștenește nicio constrângere de integritate de la vechile coloane.
 +
 +<color red>Ex. 3.</​color>​ Să se creeze o tabelă cu o prima de 15% din venitul lunar  pentru angajații din departamentul 30.
 +
 +{{ :​bd:​laboratoare:​lab10_4_carbon.png?​500 |}}
 +
 +==== Constrângeri de integritate ====
 +
 +
 +Constrângerile de integritate sunt anumite reguli care trebuie respectate la nivel de tabelă sau în relațiile cu alte tabele.
 +Aceste reguli sunt verificate automat în cazul operațiilor de inserare, ștergere și modificare și, în cazul în care nu se validează, se generează o eroare și tranzacția nu se efectuează.
 +
 +Constrângerile de integritate pot fi:
 +  * **NOT NULL** - înregistrările nu pot conține valori nule
 +  * **UNIQUE** - definește o cheie unică pe una sau mai multe coloane (nu pot fi mai multe înregistrări cu aceleași valori pe coloanele respective
 +  * **PRIMARY KEY** - definește o cheie primară la nivel de coloană sau tabelă (nu pot fi mai multe înregistrări cu aceeași cheie primară)
 +  * **FOREIGN KEY** - definește o cheie externă (tabela se relaționează cu altă tabelă pe o cheie unică sau cheie primară)
 +  * **CHECK** - forțează o condiție pe coloană
 +
 +Caracteristici ale constrângerilor de integritate:​
 +  * Fiecare constrângere va avea un nume dat de user sau generat de sistem.
 +  * Constrângerile pot fi activate sau dezactivate cu comanda ALTER TABLE.
 +  * Constrângerile pot fi adăugate sau șterse și după ce o tabela a fost creată.
 +  * Informațiile legate de constrângeri se păstrează în dicționarul de date.
 +
 +<note tip>
 +Dacă o constrângere are nume dat de utilizator atunci este mai ușor să fie modificata.</​note>​
 +
 +=== Constrângerea NOT NULL ===
 +
 +  * Se aplică la nivel de coloane și verifică dacă înregistrările au valorea null pe coloanele respective, forțând un cod de eroare care anulează tranzacția.
 +  * Cand se creează constrangeri pe o cheie primară se creează automat și o constrângere NOT NULL pe coloanele respective (o cheie primara nu trebuie să conțină valori nule pe coloanele care o definesc).
 +
 +Sintaxa:
 +<code sql>​column_name datatype [CONSTRAINT constraint_name] NOT NULL</​code>​
 +
 +{{ :​bd:​laboratoare:​lab10_5_carbon.png?​500 |}}
 +
 +=== Constrângerea UNIQUE ===
 +  * Se folosește când vrem ca o coloană, sau  perechi de coloane, să nu conțină valori duplicare.
 +  * Verificarea se face numai pentru înregistrările cu valori nenule deoarece constrângerea permite inserarea de valori nule în coloanele respective.
 +  * În mod automat se creează și un index pe coloanele define cheie unice, ceea ce duce la mărirea vitezei de integritate pe tabelă.
 +  * Dacă constrângerea se face pe o pereche de coloane atunci setul trebuie să fie unic.
 +
 +Sintaxă la nivel de coloană:
 +<code sql>​column_name datatype [CONSTRAINT constraint_name] UNIQUE</​code>​
 +
 +Sintaxă la nivel de tabelă:
 +<code sql>[, CONSTRAINT constraint_name] UNIQUE (col1[, col2, [...]])</​code>​
 +
 +{{ :​bd:​laboratoare:​lab10_6_carbon.png?​500 |}}
 +
 +=== Constrângere PRIMARY KEY ===
 +  * Se folosește pentru definirea cheii primare pe o coloană sau pereche de coloane.
 +  * O tabelă poate avea o singură constrângere de tip PRIMARY KEY și nu acceptă valori nule pentru colona sau perechea de coloane care o definesc.
 +  * Când se creează o cheie primară se creează în mod automat și o constângere de timp NOT NULL și UNIQUE.
 +  * Când se creează o cheie primară se creează în mod automat și un index pentru a scurta timpul de răspuns în cazul unei interogări.
 +
 +Sintaxa la nivel de coloană:
 +<code sql>​column_name datatype [CONSTRAINT constraint_name] PRIMARY KEY</​code>​
 +
 +Sintaxă la nivel de tabelă:
 +<code sql>[, CONSTRAINT constraint_name] PRIMARY KEY(col1[, col2, [...]])</​code>​
 +
 +<color red>Ex. 4.</​color>​ Să se  creeze un nomenclator de funcții în care fiecare funcție să aibă un cod unic.
 +
 +{{ :​bd:​laboratoare:​lab10_7_carbon.png?​500 |}}
 +
 +
 +<color red>Ex. 5.</​color>​ Să se creeze o tabelă pentru a păstra date despre o persoană. Cheia primară să se facă pe seria CI, cod CI  și CNP.
 +
 +{{ :​bd:​laboratoare:​lab10_8_carbon.png?​500 |}}
 +
 +=== Constrângerea FOREIGN KEY ===
 +  * Se folosește pentru a relaționarea unei talele cu una sau mai multe tabele, verificând dacă valorile conținute în coloanele definite de FOREIGN KEY (cheie străină sau cheie externă) sunt cuprinse în valorile coloanelor altei tabele care trebuie să fie definite ca UNIQUE sau PRIMARY KEY.
 +
 +Sintaxa la nivel de coloană:
 +<code sql>​column_name datatype [CONSTRAINT constraint_name] ​
 + REFERENCES table(column)
 + [on DELETE CASCADE | DELETE SET NULL]</​code>​
 +
 +Sintaxă la nivel de tabelă:
 +<code sql>[, CONSTRAINT constraint_name] FOREIGN KEY(col1[, col2, [...]])
 + REFERENCES table(column)
 + [on DELETE CASCADE | DELETE SET NULL]</​code>​
 +
 +**Reguli pentru FOREIGN KEY**
 +  * Inserarea unei linii într-o tabelă relațională (pe care am definit FOREIGN KEY) nu se poate face dacă valoarea pe care vrem să o inserăm pe coloana pe care avem foreign key nu există în tabela referită (în care am definit PRIMARY KEY sau UNIQUE) corespunzător coloanelor de relaționare. Se poate totuși insera valoarea null.
 +  * Ștergerea unei linii din tabela de referință nu se poate face atâta timp cât există linii relaționale pe linia respectivă în tabela relațională.
 +  * Regulile de mai sunt valabile și în cazul relaționării pe coloane.
 +
 +**Opțiunea ON DELETE CASCADE**
 +  * Pentru a putea șterge în tabela de referință linii referite în alte tabele se folosește opțiunea ON DELETE CASCADE. În acest caz, când se șterge o linie în tabela de referință se vor șterge toate liniile din tabelele relaționate care sunt în relație cu linia respectivă.
 +  * În cazul **unei tabele relaționată cu ea însăși**,​ **ștergerea unei linii care este referită duce la apariția de valori nule pe toate coloanele în liniile relaționate**. Spre exemplu, în tabela angajati, **când se șterge linia aferentă unui șef**, toți angajații **care au șeful respectiv vor primi valoare null pe coloana id_sef**.
 +  * Folosind opțiunea ON DELETE SET NULL, coloanele de relație din tabela relaționată devin nule și nu sunt șterse liniile relaționate atunci când se șterge o linie din tabela de referință.
 +
 +<color red>Ex. 6.</​color>​ Să se creeze tabela angajați și să se adauge constrângerile de integritate de tip FOREIGN KEY și PRIMARY KEY.
 +
 +{{ :​bd:​laboratoare:​lab10_9_carbon.png?​500 |}}
 +
 +=== Constrângerea CHECK ===
 +  * Se folosește pentru a forța valorile unei coloane să verifice o condiție ​
 +  * Condiția poate să conțină și funcții, cu unele excepții (**sysdate**,​ **user**, etc.)
 +Sintaxa la nivel de coloană:
 +column_name datatype [CONSTRAINT constraint_name] CHECK (expr) ​
 +Sintaxă la nivel de tabelă:
 +<code sql>[, CONSTRAINT constraint_name] CHECK (expr)</​code>​
 +
 +<color red>Ex. 7.</​color>​Să se creeze tabela angajați astfel înât să se verifice dacă salariul este mai mare ca 0 , comisionul nu depășeste salariul și numele este scris doar cu litere mari.
 +
 +{{ :​bd:​laboratoare:​lab10_10_carbon.png?​650 |}}
 +
 +==== Comanda ALTER TABLE ====
 +
 +Comanda ALTER TABLE este folosită atunci când structura unei tabele trebuie modificată,​ sau unele proprietăți trebuie să fie șterse sau adăugate.
 +
 +Sintaxa:
 + 
 +<code sql>​ALTER TABLE [schema.]table_name
 + ADD {(column datatype) [DEFAULT exp] | (column_constaints) } |
 + MODIFY {(column datatype) [DEFAULT exp] | (column_constaints) } |
 + DROP drop_clause |
 + ENABLE enable_clause |
 + DISABLE disable_clause |
 + ALLOCATE EXTENT SIZE integer [K, M] 
 + DATAFILE ‘filename’
 + INSTANCE integer ​
 + [storage_parameters]</​code>​
 +
 +{{ :​bd:​laboratoare:​lab10_11_carbon.png?​650 |}}
 +
 +Pentru a adăuga o  nouă coloană se folosește comanda:
 +
 +{{ :​bd:​laboratoare:​lab10_12_carbon.png?​500 |}}
 +
 +==== Comanda DROP TABLE ====
 +
 +Comanda DROP TABLE este folosită pentru a șterge tabela din dictionarul bazei de date.
 +
 +Sintaxa:
 +
 +<code sql>DROP TABLE table_name</​code>​
 +
 +{{ :​bd:​laboratoare:​lab10_13_carbon.png?​300 |}}
 +
 +==== Comanda TRUNCATE ====
 +
 +Comanda TRUNCATE ​ este folosită pentru golirea unui tabel.
 +Această comandă șterge toate liniile dintr-o tabelă.
 +<note important>​După ce am dat această comandă, comnda ROLLBACK nu funcționează.</​note>​
 +<note tip>​Această comandă este mult mai rapidă decât comanda DELETE.</​note>​
 +
 +Sintaxa:
 +<code sql>​TRUNCATE TABLE [schema.]table [{DROP|REUSE} STORAGE]</​code>​
 +
 +<note tip>
 +**DROP STORAGE** – eliberează spațiul rezultat din ștergerea liniilor.
 +**REUSE STORAGE** – păstrează spațiul rezultat din ștergerea liniilor alocate tabelei.</​note>​
 +
 +{{ :​bd:​laboratoare:​lab10_14_carbon.png?​300 |}}
 +
 +==== Comanda INSERT ====
 +
 +Această comandă este folosită pentru inserarea de linii într-o tabelă.
 + 
 +Sintaxa:
 +<code sql>​INSERT INTO [shema.]{table_name|view_name} [(col_1, col_2, ...)]
 + {VALUES(exp_1,​ expr_2, ...) | subquery}</​code>​
 +
 +  * **table_name|view_name** – numele tabelei sau view-ului în care se face inserarea
 +  * **col_i** – numele de coloană în care se face inserare
 +  * **expr_i** – valorile aferente coloanelor
 +  * **subquery** – este o subcerere care va întoarce valori ce vor fi utilizate la inserare
 +
 +{{ :​bd:​laboratoare:​lab10_15_carbon.png?​500 |}}
 +
 +==== Comanda UPDATE ====
 +
 +Comanda UPDATE ​ este folosită pentru a actualiza datele din baza de date.
 +
 +Sintaxa:
 +<code sql>​UPDATE [shema.]{table_name|view_name} ​
 + SET 
 + column_1 = {expr | subquery}, ... , column_n = {expr | subquery} ​ |
 + {column_1,​ ... , column_n} = subquery
 + [WHERE conditions]</​code>​
 +
 +  * **table_name|view_name** – numele tabelei sau view-ului care se modifică ​
 +  * **column_i** – numele de coloană în care se modifică
 +  * **expr** – valorile aferente coloanelor
 +  * **subquery** – este o subcerere care va întoarce o linie și un număr de coloane egal cu numărul de coloane care va fi modificat
 +  * **conditions** – condiția care trebuie îndeplinită pentru modificarea datelor
 +
 +<note important>​Când se face actualizarea datelor într-o tabelă se verifică automat și constrângerile de integritate definite pe tabela respectivă,​ altfel se va genera un cod de eroare și tranzacția va eșua.</​note>​
 +
 +Situații în care pot apărea erori:
 +  * Noile valori sunt duplicare de cheie primară sau unică.
 +  * Actualizarea valorii cu o valoare nulă când coloana este NOT NULL.
 +  * Valorile noi nu respectă constrângerea CHECK.
 +  * Valorile noi nu respectă constrângerea FOREIGN KEY.
 +  * Valorile vechi erau referite de alte tabele printr-o constrângere FOREIGN KEY.
 +  * Subcererea returnează mai multe înregistrări.
 +
 +{{ :​bd:​laboratoare:​lab10_16_carbon.png?​500 |}}
 +
 +==== Comanda DELETE ====
 +
 +Comanda DELETE este folosită pentru ștergerea liniilor dintr-o tabelă sau view.
 +Sintaxa:
 +
 +<code sql>​DELETE FROM [schema.] {table_name|view_name} ​
 +WHERE conditions</​code>​
 +
 +  * **table_name|view_name** – numele tabelului sau viewului din care se șterg linii
 +  * **conditions** – condițiile care trebuie îndeplinită pentru ștergerea liniilor
 +<note tip>​Clauza WHERE permite folosirea ​ de subcereri.</​note>​
 +
 +{{ :​bd:​laboratoare:​lab10_17_carbon.png?​500 |}}
 +
 +==== Comenzile COMMIT și ROLLBACK ====
 +**COMMIT** – este folosită pentru a face persistente informațiile din baza de date după ce tranzacțiile s-au terminat cu succes.
 +
 +**ROLLBACK** – readuce starea bazei de date la o stare anterioară.
 +
 +==== SEQUENCE ====
 +
 +O secvență este un obiect al bazei de date care generează numere intregi unice.
 +O secvență este folosită pentru a genera valori pentru cheia primară.
 +Sintaxa:
 +<code sql>​CREATE SEQUENCE [schema. ]sequence_name
 + [[ INCREMENT BY integer ]
 + | [START WITH ] integer ​
 + | [ MAXVALUE integer | NOMAXVALUE ]
 + | [ MINVALUE integer | NOMINVALUE ]
 + | [ CYCLE | NOCYCLE ]
 + | [ CACHE integer | NOCACHE } ]
 + | [ ORDER | NOORDER ] ]</​code>​
 +  * **sequence_name** – numele secvenței
 +  * **INCREMENT BY** – specifică incrementul
 +  * **START WITH** – specifică valoare de start
 +  * **MAXVALUE** – specifică valoarea maximă a secvenței
 +  * **NOMAXVALUE** – specifică ca valoarea maximă este 10^27 pentru secvențe crescătoare și -1 pentru cele descrescătoare,​ această valaoare este implicită
 +  * **MINVALUE** – specifică valoare minimă a secvenței
 +  * **NOMINVALUE** ​ – specifică ca valoarea minimă este 1 pentru secvențe crescătoare și -10^26 pentru cele descrescătoare,​ această valaoare este implicită
 +  * **CYCLE** – se folosește atunci când se dorește să se genereze valori chiar dacă s-a ajuns la valoarea minimă sau maximă ;
 +  * **NOCYCLE** – se folosește atunci când nu se dorește să se genereze valori atunci când se ajunge la valoarea minimă sau maximă;
 +  * **CACHE** – specifică câte valori se vor prealoca și se vor păstra în memorie ;
 +  * **NOCACHE** – specifică să nu se pre-aloce valori și să nu se păstreze în memorie;
 +  * **ORDER** – garantează că valorile se generează în ordine, folosit pentru RAC (Oracle Real Application Clusters);
 +  * **NOORDER** – nu garantează că valorile se generează în ordine.
 +
 +**Comanda ALTER SEQUENCE**
 +
 +Sintaxa:
 +<code sql>
 +ALTER SEQUENCE [ schema. ] sequence_name
 +{ INCREMENT BY integer ​
 +| { MAXVALUE integer | NOMAXVALUE } 
 +| { MINVALUE integer | NOMINVALUE } 
 +| { CYCLE | NOCYCLE } 
 +| { CACHE integer | NOCACHE } 
 +| { ORDER | NOORDER }</​code>​
 +
 +
 +**Comanda DROP SEQUENCE**
 +<code sql>DROP SEQUENCE sequence_name</​code>​
 +
 +{{ :​bd:​laboratoare:​lab10_18_carbon.png?​500 |}}
 +
 +==== INDEX ====
 +
 +Un index este o structură care îmbunătățește viteza de acces la datele dintr-o bază de date.
 +Indecși se creează automat în momentul în care se creează o cheie primară sau una unică.
 +Sintaxa:
 +<code sql>​CREATE ​
 + [ONLINE|OFFLINE] ​
 + [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name
 + ON table_name(column_name)
 + index_options</​code>​
 +
 +Ștergerea unui index:
 +<code sql>DROP INDEX index_name</​code>​
 +
 +Pentru a modifica opțiunile unui index se folosește comanda ALTER INDEX.
 +
 +{{ :​bd:​laboratoare:​lab10_19_carbon.png?​500 |}}
 +
 +==== VIEW ====
 +
 +O vedere este o tabelă logică care extrage date dintr-o tabelă propriu-zisă sau dintr-o alta vedere.
 +O vedere nu are date proprii, ci este ca o fereastră prin care datele din tabele pot fi actualizate sau vizualizate.
 +O vedere poate să conțină toate datele dintr-o tabelă (sau mai multe) sau anumite coloane.
 +Sintaxa:
 +
 +<code sql>​CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view_name
 +    [ (alias [, alias]...) ] 
 +  AS subquery ​
 +[WITH CHECK OPTION [CONSTRAINT constraint] ]
 +[WITH READ ONLY [CONSTRAINT constraint] ];</​code>​
 +
 +Pentru a șterge o tabelă atunci se va folosi comanda DROP.
 +<code sql>DROP VIEW view_name</​code>​
 +
 +<note important>​Pe un VIEW care extrage date dintr-o singură tabelă se pot utiliza comenzile INSERT, UPDATE, DELETE.
 +Dacă VIEW-UL extrage informații din mai multe tebele atunci comenzile INSERT, UPDATE, DELETE nu se pot folosi.</​note>​
 +
 +{{ :​bd:​laboratoare:​lab10_20_carbon.png?​500 |}}
 +
 +==== Alte comenzi ====
 +
 +**ALTER DATABASE** – pentru diverse operațiuni asupra bazei de date cum ar fi: deschiderea,​ inchiderea, montarea, crearea de noi fisiere de date, salvarea fisierelor de control, etc.
 +<code sql>​ALTER DATABASE {MOUNT | OPEN [RESETLOGS]}</​code>​
 +
 +**ALTER SESSION** – pentru schimbarea parametrilor unei sesiuni cum ar fi formatul de date, limba de afișare a mesajelor, setul de caractere utilizare, etc.
 +Simbarea formatului de  afișare a datei calendaristice
 +<code sql>​ALTER SESSION set NLS_DATE_FORMAT='​dd-mm-yyyy';</​code>​
 +
 +**ALTER SYSTEM** – pentru schimbarea parametrilor de sistem cum ar fi: numărul maxim de useri, numărul maxim de sesiuni, activarea/​dezactivarea unor parametri, închiderea unei sesiuni;
 +Schimbarea numărului maxim de sesiuni pentru instanța curentă la 60 și avertizarea la 50 de sesiuni (trebuie să aveți privilegiile necesare pentru a face modificări).
 +<code sql>​ALTER SYSTEM SET LICENSE_MAX_SESSIONS = 60 LICENSE_SESSIONS_WARNING = 50;</​code>​
 +
 +**ALTER TABLESPACE** – pentru modificarea parametrilor unui tablespace cum ar fi: adăugarea de noi fișiere de date, modificarea vechilor parametri, etc.
 +Extinderea unui tablespace cu un nou fișier de date:
 +<code sql>​ALTER TABLESPACE ADD DATAFILE '​E:​\student\file.dat'</​code>​
 +
 +**ALTER USER** – pentru modificarea parametrilor de user cum ar fi: schimbarea parolei, alocarea de roluri, specificarea tablespace-ului implicit, cota alocată în tablespace, etc.
 +Atribuirea tuturor rolurilor pentru userul student mai puțin cel de administrator al bazei de date.
 +<code sql>​ALTER USER student DEFAULT ROLE ALL EXCEPT DBA</​code>​
 +
 +**CONNECT** – pentru conextarea la baza de date.
 +<code sql>​CONNECT sys AS SYSDBA</​code>​
 +
 +**CREATE ROLE** – pentru crearea rolurilor de acces la obiectele bazei de date.
 +<code sql>​CREATE ROLE admin IDENTIFY BY sef</​code>​
 +
 +**CREATE TABLESPACE** – pentru a crea un nou tablespace.
 +
 +**CREATE USER** – pentru crearea unui user.
 +<code sql>​CREATE USER student
 + IDENTIFIED BY student
 + DEFAULT TABLESPACE student;</​code>​
 +
 +**GRANT** – pentru a grantifica privilegiile sau rolurile unor utilizatori.
 +<code sql>​GRANT {privilege|role} [ON TABLE] TO username</​code> ​
 +
 +**REVOKE** – pentru a revoca privilegiile sau rolurile unor utilizatori.
 +<code sql>​REVOKE {privilege|role} [ON TABLE] FROM username</​code>​
bd/laboratoare/10.txt · Last modified: 2020/02/18 21:44 by iulia.radulescu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0