PROGRAMARE BAZE DE DATE ORACLE Capitolul...

58
PROGRAMARE BAZE DE DATE ORACLE Capitolul 1 Prof. Cojocar-Horobăț Luminița

Transcript of PROGRAMARE BAZE DE DATE ORACLE Capitolul...

Page 1: PROGRAMARE BAZE DE DATE ORACLE Capitolul 1liceulteoreticdecebal-ct.ro/files/Programare-Baze-de-date--Oracle1.pdf · PROGRAMARE BAZE DE DATE ORACLE Capitolul 1 Prof. Cojocar-Horobăț

PROGRAMARE BAZE DE DATE ORACLE

Capitolul 1

Prof. Cojocar-Horobăț Luminița

Page 2: PROGRAMARE BAZE DE DATE ORACLE Capitolul 1liceulteoreticdecebal-ct.ro/files/Programare-Baze-de-date--Oracle1.pdf · PROGRAMARE BAZE DE DATE ORACLE Capitolul 1 Prof. Cojocar-Horobăț

Crearea unui tabel – comanda

CREATE TABLE Comanda CREATE TABEL permite crearea unui

nou tabel în schema proprie (mulţimea tuturor obiectelor din proprietatea sa) şi are sintaxa: CREATE TABLE <nume tabel> (<nume coloana 1 > <tip coloana

1 [DEFAULT <valoare sau expresie>]>

[CONSTRAINT] [DISABLE] <contrângere>, <nume coloana n> <tip coloana n>)

sau

CREATE TABLE <nume tabel> AS

SELECT <coloana 1>, <coloana 2>, <coloana n>

FROM <tabel>

Page 3: PROGRAMARE BAZE DE DATE ORACLE Capitolul 1liceulteoreticdecebal-ct.ro/files/Programare-Baze-de-date--Oracle1.pdf · PROGRAMARE BAZE DE DATE ORACLE Capitolul 1 Prof. Cojocar-Horobăț
Page 4: PROGRAMARE BAZE DE DATE ORACLE Capitolul 1liceulteoreticdecebal-ct.ro/files/Programare-Baze-de-date--Oracle1.pdf · PROGRAMARE BAZE DE DATE ORACLE Capitolul 1 Prof. Cojocar-Horobăț

Reguli

• Numele tabelului nu poate depăşi 30 de

caractere, poate conţine doar litere, cifre şi

caracterele _,$ şi #. Începe obligatoriu cu

literă, nu se pot folosi cuvinte rezervate

Oracle.

• Regulile de mai sus se aplică şi în cazul

coloanelor.

Page 5: PROGRAMARE BAZE DE DATE ORACLE Capitolul 1liceulteoreticdecebal-ct.ro/files/Programare-Baze-de-date--Oracle1.pdf · PROGRAMARE BAZE DE DATE ORACLE Capitolul 1 Prof. Cojocar-Horobăț

• Proprietarul are toate drepturile asupra obiectelor

lui.

• Dacă se doreşte crearea unui tabel în orice

schemă, se foloseşte comanda:

CREATE ANY TABLE

Tabelele utilizatorilor sunt înregistrate în dicţionarul

bazei de date (catalogul BD). Acest dicţionar se

creează odată cu crearea bazei de date şi are în

spate nişte tabele interne.

Page 6: PROGRAMARE BAZE DE DATE ORACLE Capitolul 1liceulteoreticdecebal-ct.ro/files/Programare-Baze-de-date--Oracle1.pdf · PROGRAMARE BAZE DE DATE ORACLE Capitolul 1 Prof. Cojocar-Horobăț

Din dicţionarul BD se pot afla toate

tabelele existente cu comanda :

SELECT * FROM DICTIONARY

DBA *

ALL *

USER *

Toate obiectele din BD

Toate obiectele din schema proprie şi acele obiecte din alte scheme pt. care am privilegii de acces

Tables, views, queries, etc….

Page 7: PROGRAMARE BAZE DE DATE ORACLE Capitolul 1liceulteoreticdecebal-ct.ro/files/Programare-Baze-de-date--Oracle1.pdf · PROGRAMARE BAZE DE DATE ORACLE Capitolul 1 Prof. Cojocar-Horobăț

Continuare – CREATE

TABLE

• Coloanele pot avea valori implicite (Default Value). Valorile implicite pot fi valori literale, expresii sau funcţii SQL (SYSDATE, USER), dar nu pot fi numele altor coloane, pseudocoloane (NEXTVAL sau CURRVAL). Bineînţeles, valorile implicite trebuie să fie compatibile cu tipul datei coloanei respective.

Page 8: PROGRAMARE BAZE DE DATE ORACLE Capitolul 1liceulteoreticdecebal-ct.ro/files/Programare-Baze-de-date--Oracle1.pdf · PROGRAMARE BAZE DE DATE ORACLE Capitolul 1 Prof. Cojocar-Horobăț

Continuare – CREATE

TABLE

• O altă metodă de a crea un nou tabel este

aceea de a folosi o interogare.

CREATE TABLE <nume tabel> AS

SELECT <coloana 1>, <coloana 2>, <coloana

n>

FROM <tabel>

Page 9: PROGRAMARE BAZE DE DATE ORACLE Capitolul 1liceulteoreticdecebal-ct.ro/files/Programare-Baze-de-date--Oracle1.pdf · PROGRAMARE BAZE DE DATE ORACLE Capitolul 1 Prof. Cojocar-Horobăț

Observaţii: 1. numai definiţiile tipurilor şi

constrângerile NOT NULL sunt transmise tabelei nou create printr-un subquery (tabela va fi utilizată într-un nou context în care nu sunt relevante relaţiile pk-fk. 2. numele şi tipurile coloanelor din noua tabelă vor fi identice cu cele din tabela sursă.

Page 10: PROGRAMARE BAZE DE DATE ORACLE Capitolul 1liceulteoreticdecebal-ct.ro/files/Programare-Baze-de-date--Oracle1.pdf · PROGRAMARE BAZE DE DATE ORACLE Capitolul 1 Prof. Cojocar-Horobăț

Scrieţi o comandă SQL care crează tabelul

products table cu următoarea structură:

• product_id ,

• product_name,

• product_description ,

• purchase_date – valoare implicită data

curentă.

Page 11: PROGRAMARE BAZE DE DATE ORACLE Capitolul 1liceulteoreticdecebal-ct.ro/files/Programare-Baze-de-date--Oracle1.pdf · PROGRAMARE BAZE DE DATE ORACLE Capitolul 1 Prof. Cojocar-Horobăț

CREATE TABLE products

(product_id NUMBER(2),

product_name VARCHAR2(20),

product_description VARCHAR2(100),

purchase_date DATE DEFAULT

SYSDATE);

Page 12: PROGRAMARE BAZE DE DATE ORACLE Capitolul 1liceulteoreticdecebal-ct.ro/files/Programare-Baze-de-date--Oracle1.pdf · PROGRAMARE BAZE DE DATE ORACLE Capitolul 1 Prof. Cojocar-Horobăț

FIRST_NAME LAST_NAME SALARY HIRE_DATE JOB_ID

DEPART

MENT_ID

Steven King 24000 17-Jun-87 AD_PRES 90

Lex De Haan 17000 13-Jan-93 AD_VP 90

Alexander Hunold 9000 03-Jan-90 IT_PROG 60

Bruce Ernst 6000 21-May-91 IT_PROG 60

Diana Lorentz 4200 07-Feb-99 IT_PROG 60

Kevin Mourgos 5800 16-Nov-99 ST_MAN 50

Randall Matos 2600 15-Mar-98 ST_CLERK 50

Peter Vargas 2500 09-Jul-98 ST_CLERK 50

Eleni Zlotkey 10500 29-Jan-00 SA_MAN 80

Fie tabelul de mai sus, conţinând angajaţii

unei întreprinderi. Creaţi din acest tabel un

alt tabel, care va conţine numele, prenumele

şi data angajării angajaţilor care au salariul

mai mare de 1000 $.

Page 13: PROGRAMARE BAZE DE DATE ORACLE Capitolul 1liceulteoreticdecebal-ct.ro/files/Programare-Baze-de-date--Oracle1.pdf · PROGRAMARE BAZE DE DATE ORACLE Capitolul 1 Prof. Cojocar-Horobăț

CREATE TABLE copy_employees AS

(SELECT first_name, last_name,

hire_date

from employees

WHERE salary > 1000);

Page 14: PROGRAMARE BAZE DE DATE ORACLE Capitolul 1liceulteoreticdecebal-ct.ro/files/Programare-Baze-de-date--Oracle1.pdf · PROGRAMARE BAZE DE DATE ORACLE Capitolul 1 Prof. Cojocar-Horobăț

TIPURI DE DATE SQL

• Varchar2 – şir de caractere de lungime variabilă

de max. 4000 caractere; se precizează obligatoriu

lungimea şirului; nu pune blank-uri

– Ex: varchar2(80)

• Char – şir de caractere de lungime fixă până la

2000 de caractere; dacă utilizatorul furnizează

mai puţine caractere, se adaugă blank- uri la

stânga.

Page 15: PROGRAMARE BAZE DE DATE ORACLE Capitolul 1liceulteoreticdecebal-ct.ro/files/Programare-Baze-de-date--Oracle1.pdf · PROGRAMARE BAZE DE DATE ORACLE Capitolul 1 Prof. Cojocar-Horobăț

• Number – număr real de până la 38 cifre

– Ex: NUMBER(10,2) – partea întreagă formată din 8 cifre, iar partea zecimală din 2. Punctul zecimal nu se numără.

• Date – dată calendaristică, nu poate stoca fracţiuni de secundă

– Ex: 21-Aug-2007 13:12:10 este corect

– Ex: 21-Aug-2007 13:12:10.245 este incorect

Formatul implicit al datei calendaristice este

DD-MON-YY

Page 16: PROGRAMARE BAZE DE DATE ORACLE Capitolul 1liceulteoreticdecebal-ct.ro/files/Programare-Baze-de-date--Oracle1.pdf · PROGRAMARE BAZE DE DATE ORACLE Capitolul 1 Prof. Cojocar-Horobăț

• Timestamp – este o extensie a tipului Date

şi permite stocarea datelor până la ordinul

nanosecundelor.

– Ex: timestamp(3) alocă 3 cifre după secunde,

adică măsoară în milisecunde

• Timestamp with timezone – stochează

diferenţa de fus orar

• Timestamp with local timezone – este

raportat la diferenţa de fus orar al BD.

Page 17: PROGRAMARE BAZE DE DATE ORACLE Capitolul 1liceulteoreticdecebal-ct.ro/files/Programare-Baze-de-date--Oracle1.pdf · PROGRAMARE BAZE DE DATE ORACLE Capitolul 1 Prof. Cojocar-Horobăț

• Interval data types

– Returnează timpul scurs între două date

calendaristice

• Interval year(precizie_an) to month –

returnează intervalul de timp exprimat în

ani şi luni; precizie_an se referă la numărul

de cifre din reprezentarea anul şi are

valoarea implicită 2.

Page 18: PROGRAMARE BAZE DE DATE ORACLE Capitolul 1liceulteoreticdecebal-ct.ro/files/Programare-Baze-de-date--Oracle1.pdf · PROGRAMARE BAZE DE DATE ORACLE Capitolul 1 Prof. Cojocar-Horobăț

• Interval day(precizie_zile) to second

(precizie fracţiuni de secundă) - returnează

intervalul de timp exprimat în zile, ore,

minute şi secunde, unde precizie_zile se

referă la numărul maxim de cifre alocate

zilei şi are valoarea implicită 2, iar precizie

fracţiuni de secundă reprezintă numărul de

cifre zecimale din reprezentarea secundei,

având valoarea implicită 6.

Page 19: PROGRAMARE BAZE DE DATE ORACLE Capitolul 1liceulteoreticdecebal-ct.ro/files/Programare-Baze-de-date--Oracle1.pdf · PROGRAMARE BAZE DE DATE ORACLE Capitolul 1 Prof. Cojocar-Horobăț

• LONG – se foloseşte în cazul datelor

multimedia, caractere de dimensiune de

până la 2 G; stocarea este in-line, folosirea

acestui tip nu este recomandată.

• RAW– se foloseşte pentru date binare,

fişiere multimedia (jpg, mp3, wav) de

dimensiune variabilă de max. 2000 bytes;

Page 20: PROGRAMARE BAZE DE DATE ORACLE Capitolul 1liceulteoreticdecebal-ct.ro/files/Programare-Baze-de-date--Oracle1.pdf · PROGRAMARE BAZE DE DATE ORACLE Capitolul 1 Prof. Cojocar-Horobăț

• CLOB - caracter large object – tip de

caractere de dimensiune variabilă – max. 4

Giga

• BLOB – binary large object - tip

multimedia de dimensiune variabilă – max.

4 Giga

• BFILE – şir binar de 4 Giga, se reţine doar

directorul şi numele fisierului

Page 21: PROGRAMARE BAZE DE DATE ORACLE Capitolul 1liceulteoreticdecebal-ct.ro/files/Programare-Baze-de-date--Oracle1.pdf · PROGRAMARE BAZE DE DATE ORACLE Capitolul 1 Prof. Cojocar-Horobăț

Modificarea structurii unui tabel –

inserarea / ştergerea coloanelor

• Pentru a insera, şterge sau modifica o coloană în/dintr-un tabel, se foloseşte comanda ALTER TABEL, care are următoarea sintaxă:

ALTER TABLE <table>

ADD (<numele noii coloane> <tipul datei>)

DROP COLUMN <numele coloanei>

MODIFY (<coloana 1> <tipul datei> [DEFAULT <valoare sau expresie>], <coloana n> <tipul datei>)

Page 22: PROGRAMARE BAZE DE DATE ORACLE Capitolul 1liceulteoreticdecebal-ct.ro/files/Programare-Baze-de-date--Oracle1.pdf · PROGRAMARE BAZE DE DATE ORACLE Capitolul 1 Prof. Cojocar-Horobăț

ALTER • Adăugarea unei noi coloane

• Modificarea unei coloane existente

• Definirea unei valori DEFAULT pentru o coloană

• Ştergerea unei coloane

Page 23: PROGRAMARE BAZE DE DATE ORACLE Capitolul 1liceulteoreticdecebal-ct.ro/files/Programare-Baze-de-date--Oracle1.pdf · PROGRAMARE BAZE DE DATE ORACLE Capitolul 1 Prof. Cojocar-Horobăț

Inserarea unei coloane

• Se poate adăuga o nouă coloană într-un

tabel existent, folosind comanda

ALTER TABLE numetabel

ADD (numecoloana tipdata [default…],….)

Page 24: PROGRAMARE BAZE DE DATE ORACLE Capitolul 1liceulteoreticdecebal-ct.ro/files/Programare-Baze-de-date--Oracle1.pdf · PROGRAMARE BAZE DE DATE ORACLE Capitolul 1 Prof. Cojocar-Horobăț

OBSERVAŢII

• Coloanele noi se vor adăuga la sfârşitul tabelei

• Dacă tabela deja conţine linii, la adăugarea unei coloane, toate valorile coloanei vor fi NULL.

Page 25: PROGRAMARE BAZE DE DATE ORACLE Capitolul 1liceulteoreticdecebal-ct.ro/files/Programare-Baze-de-date--Oracle1.pdf · PROGRAMARE BAZE DE DATE ORACLE Capitolul 1 Prof. Cojocar-Horobăț

ADĂUGAREA UNEI COLOANE

Page 26: PROGRAMARE BAZE DE DATE ORACLE Capitolul 1liceulteoreticdecebal-ct.ro/files/Programare-Baze-de-date--Oracle1.pdf · PROGRAMARE BAZE DE DATE ORACLE Capitolul 1 Prof. Cojocar-Horobăț

Modificarea unei coloane Pentru a modifica o coloană, se foloseşte comanda

MODIFY. Cu ajutorul ei se poate:

• Mări dimensiunea unei coloane corespunzătoare unui câmp numeric sau şir de caractere.

• Micşora dimensiunea unei coloane doar dacă aceasta conţine numai valori nule sau tabelul nu conţine înregistrări (linii).

• Modifica tipul coloanei doar dacă coloana conţine valori nule.

Page 27: PROGRAMARE BAZE DE DATE ORACLE Capitolul 1liceulteoreticdecebal-ct.ro/files/Programare-Baze-de-date--Oracle1.pdf · PROGRAMARE BAZE DE DATE ORACLE Capitolul 1 Prof. Cojocar-Horobăț

Continuare - MODIFY

• converti tipul char în varchar2 sau varchar2

în char doar dacă coloana conţine valori

nule sau dacă nu se modifică dimensiunea

coloanei. O modificare a valorii implicite a

unei coloane va avea efect doar asupra

datelor nou-introduse.

Page 28: PROGRAMARE BAZE DE DATE ORACLE Capitolul 1liceulteoreticdecebal-ct.ro/files/Programare-Baze-de-date--Oracle1.pdf · PROGRAMARE BAZE DE DATE ORACLE Capitolul 1 Prof. Cojocar-Horobăț

Stergerea unei coloane

• Stergerea unei coloane se face cu comanda

ALTER TABLE numetabel

DROP COLUMN numecoloana

Page 29: PROGRAMARE BAZE DE DATE ORACLE Capitolul 1liceulteoreticdecebal-ct.ro/files/Programare-Baze-de-date--Oracle1.pdf · PROGRAMARE BAZE DE DATE ORACLE Capitolul 1 Prof. Cojocar-Horobăț

ŞTERGEREA UNEI COLOANE

• Coloana poate fi ştearsă chiar dacă conţine sau nu date

• Doar o coloană poate fi ştearsă la un moment dat • Nu se pot şterge toate coloanele unei tabele;

trebuie să rămână cel puţin una • După ştergere, datele nu mai pot fi recuperate

Page 30: PROGRAMARE BAZE DE DATE ORACLE Capitolul 1liceulteoreticdecebal-ct.ro/files/Programare-Baze-de-date--Oracle1.pdf · PROGRAMARE BAZE DE DATE ORACLE Capitolul 1 Prof. Cojocar-Horobăț

NEUTILIZAREA UNOR COLOANE • Coloanele se pot seta ca

invizibile, astfel încât datele rămân, dar sunt neutilizabile

• Se pot adăuga noi coloane cu acelaşi nume ca al celei neutilizate

Page 31: PROGRAMARE BAZE DE DATE ORACLE Capitolul 1liceulteoreticdecebal-ct.ro/files/Programare-Baze-de-date--Oracle1.pdf · PROGRAMARE BAZE DE DATE ORACLE Capitolul 1 Prof. Cojocar-Horobăț

DROP TABLE • Şterge definiţia unei

tabele Oracle

• Se vor şterge toate datele şi toţi indecşii asociaţi

• Descrierea tabelei este ştearsă din Data Dictionary

• Este ireversibilă!!!

Page 32: PROGRAMARE BAZE DE DATE ORACLE Capitolul 1liceulteoreticdecebal-ct.ro/files/Programare-Baze-de-date--Oracle1.pdf · PROGRAMARE BAZE DE DATE ORACLE Capitolul 1 Prof. Cojocar-Horobăț

Inserarea liniilor – Comanda

INSERT

Comanda INSERT permite inserarea unor linii

într-un tabel.

Este o comandă de tranzacţie, manipulare a

datelor (DML), la fel ca şi Update, Delete şi

Merge.

INSERT INTO <nume tabel>(<coloana 1>, <coloana 2>,

....<coloana n>)

VALUES (<valoare 1>, <valoare 2>, ....<valoare n>)

Page 33: PROGRAMARE BAZE DE DATE ORACLE Capitolul 1liceulteoreticdecebal-ct.ro/files/Programare-Baze-de-date--Oracle1.pdf · PROGRAMARE BAZE DE DATE ORACLE Capitolul 1 Prof. Cojocar-Horobăț

OBSERVAŢIE

Denumirile coloanelor pot fi scrise explicit,

sau pot lipsi (se recomandă numai în cazul în care

utilizatorul este foarte sigur asupra structurii

tabelului, dar trebuie să fie atent la valorile trecute

în clauza VALUES şi la tipul acestora, precum şi

la ordinea în care apar).

Page 34: PROGRAMARE BAZE DE DATE ORACLE Capitolul 1liceulteoreticdecebal-ct.ro/files/Programare-Baze-de-date--Oracle1.pdf · PROGRAMARE BAZE DE DATE ORACLE Capitolul 1 Prof. Cojocar-Horobăț

INSERAREA LINIILOR CU

VALORI NULL

Numele unei coloane poate fi omis din clauza

INSERT, numai dacă admite valori NULL

Page 35: PROGRAMARE BAZE DE DATE ORACLE Capitolul 1liceulteoreticdecebal-ct.ro/files/Programare-Baze-de-date--Oracle1.pdf · PROGRAMARE BAZE DE DATE ORACLE Capitolul 1 Prof. Cojocar-Horobăț

INSERAREA VALORILOR

SPECIALE

Se pot folosi SYSDATE(data şi ora curentă) şi

USER(utilizatorul din sesiunea curentă), funcţii şi

expresii de calcul.

Page 36: PROGRAMARE BAZE DE DATE ORACLE Capitolul 1liceulteoreticdecebal-ct.ro/files/Programare-Baze-de-date--Oracle1.pdf · PROGRAMARE BAZE DE DATE ORACLE Capitolul 1 Prof. Cojocar-Horobăț

INSERAREA VALORILOR DATĂ CALENDARISTICĂ

Page 37: PROGRAMARE BAZE DE DATE ORACLE Capitolul 1liceulteoreticdecebal-ct.ro/files/Programare-Baze-de-date--Oracle1.pdf · PROGRAMARE BAZE DE DATE ORACLE Capitolul 1 Prof. Cojocar-Horobăț
Page 38: PROGRAMARE BAZE DE DATE ORACLE Capitolul 1liceulteoreticdecebal-ct.ro/files/Programare-Baze-de-date--Oracle1.pdf · PROGRAMARE BAZE DE DATE ORACLE Capitolul 1 Prof. Cojocar-Horobăț

COPIEREA UNOR LINII FOLOSIND

SUBQUERY

• Numărul coloanelor şi tipul lor trebuie să coincidă

în clauza INSERT şi în subquery

• Subquery nu mai trebuie pus în paranteză, ca în

clauza WHERE a lui SELECT.

Page 39: PROGRAMARE BAZE DE DATE ORACLE Capitolul 1liceulteoreticdecebal-ct.ro/files/Programare-Baze-de-date--Oracle1.pdf · PROGRAMARE BAZE DE DATE ORACLE Capitolul 1 Prof. Cojocar-Horobăț

Nu putem insera toate liniile dintr-un

tabel într-ul alt tabel, decât dacă ambele

tabele au acelaşi număr de coloane, în

aceeaşi ordine şi au acelaşi tip.

Page 40: PROGRAMARE BAZE DE DATE ORACLE Capitolul 1liceulteoreticdecebal-ct.ro/files/Programare-Baze-de-date--Oracle1.pdf · PROGRAMARE BAZE DE DATE ORACLE Capitolul 1 Prof. Cojocar-Horobăț

INSERT INTO copy_d_events (ID, NAME, EVENT_DATE, DESCRIPTION, COST, VENUE_ID, PACKAGE_CODE, THEME_CODE,CLIENT_NUMBER)

VALUES (110, 'Ayako Anniversary', TO_DATE('07-JUL-04','DD-MON-RR'), 'Party for 50, sixties dress, decorations', 0, 245, 79, 240, 6655);

Page 41: PROGRAMARE BAZE DE DATE ORACLE Capitolul 1liceulteoreticdecebal-ct.ro/files/Programare-Baze-de-date--Oracle1.pdf · PROGRAMARE BAZE DE DATE ORACLE Capitolul 1 Prof. Cojocar-Horobăț

Modificarea unei coloane folosind

o subquery

Page 42: PROGRAMARE BAZE DE DATE ORACLE Capitolul 1liceulteoreticdecebal-ct.ro/files/Programare-Baze-de-date--Oracle1.pdf · PROGRAMARE BAZE DE DATE ORACLE Capitolul 1 Prof. Cojocar-Horobăț

Modificarea unei coloane folosind

2 subquery

Page 43: PROGRAMARE BAZE DE DATE ORACLE Capitolul 1liceulteoreticdecebal-ct.ro/files/Programare-Baze-de-date--Oracle1.pdf · PROGRAMARE BAZE DE DATE ORACLE Capitolul 1 Prof. Cojocar-Horobăț

Modificarea liniilor folosind

o altă tabelă

Page 44: PROGRAMARE BAZE DE DATE ORACLE Capitolul 1liceulteoreticdecebal-ct.ro/files/Programare-Baze-de-date--Oracle1.pdf · PROGRAMARE BAZE DE DATE ORACLE Capitolul 1 Prof. Cojocar-Horobăț

Observaţii - UPDATE

• Valoarea cheii străine trebuie să se regăsească între valorile cheii primare;

• Nu putem modifica cheia primară dacă are cheie străină; prima dată modificăm sau ştergem cheia străină, apoi putem modifica cheia primară.

• Nu se poate şterge o linie care conţine o cheie primară, care etse folosită ca şi cheie străină în altă tabelă.

Page 45: PROGRAMARE BAZE DE DATE ORACLE Capitolul 1liceulteoreticdecebal-ct.ro/files/Programare-Baze-de-date--Oracle1.pdf · PROGRAMARE BAZE DE DATE ORACLE Capitolul 1 Prof. Cojocar-Horobăț

Comanda DELETE

• Se foloseşte pentru a şterge linii dintr-un tabel.

• Are următoarea sintaxă:

DELETE FROM <nume tabel>

WHERE <condiţia pentru liniile selectate>

Page 46: PROGRAMARE BAZE DE DATE ORACLE Capitolul 1liceulteoreticdecebal-ct.ro/files/Programare-Baze-de-date--Oracle1.pdf · PROGRAMARE BAZE DE DATE ORACLE Capitolul 1 Prof. Cojocar-Horobăț

Exemple DELETE

1. DELETE FROM copy_f_customers

WHERE ID= 123;

(şterge clienţii cu codul 123)

2. DELETE FROM copy_f_customers

(şterge toate rândurile)

Page 47: PROGRAMARE BAZE DE DATE ORACLE Capitolul 1liceulteoreticdecebal-ct.ro/files/Programare-Baze-de-date--Oracle1.pdf · PROGRAMARE BAZE DE DATE ORACLE Capitolul 1 Prof. Cojocar-Horobăț

ŞTERGERI CU SUBQUERY

Page 48: PROGRAMARE BAZE DE DATE ORACLE Capitolul 1liceulteoreticdecebal-ct.ro/files/Programare-Baze-de-date--Oracle1.pdf · PROGRAMARE BAZE DE DATE ORACLE Capitolul 1 Prof. Cojocar-Horobăț

ŞTERGERI FOLOSIND O ALTĂ

TABELĂ

Page 49: PROGRAMARE BAZE DE DATE ORACLE Capitolul 1liceulteoreticdecebal-ct.ro/files/Programare-Baze-de-date--Oracle1.pdf · PROGRAMARE BAZE DE DATE ORACLE Capitolul 1 Prof. Cojocar-Horobăț

Observaţii - DELETE

La ştergeri, trebuie să respectăm restricţii de implementare:

• R- restrictive – nu se poate şterge părintele dacă are fii

• C – on delete cascade – dacă şterg părintele, se şterg şi fii

• N – on delete null – dacă şterg părintele, cheia străină trece pe NULL

• D – default – dacă şterg părintele, fii trec pe un părinte implicit

Page 50: PROGRAMARE BAZE DE DATE ORACLE Capitolul 1liceulteoreticdecebal-ct.ro/files/Programare-Baze-de-date--Oracle1.pdf · PROGRAMARE BAZE DE DATE ORACLE Capitolul 1 Prof. Cojocar-Horobăț

OBSERVAŢII - DELETE

• După ştergerea liniilor cu DELETE, rămâne doar

structura tabelei(numele coloanelor, cheile

străine, cheile primare şi tipurile de dată).

• Pentru a şterge totul, se foloseşte DROP TABLE.

Page 51: PROGRAMARE BAZE DE DATE ORACLE Capitolul 1liceulteoreticdecebal-ct.ro/files/Programare-Baze-de-date--Oracle1.pdf · PROGRAMARE BAZE DE DATE ORACLE Capitolul 1 Prof. Cojocar-Horobăț

ERORI – CONSTRÂNGERI DE

INTEGRITATE

- este violată constrângerea NOT NULL pentru

first_name, deoarece nu se găseşte id-ul 23 şi deci

subquery returnează NULL

Page 52: PROGRAMARE BAZE DE DATE ORACLE Capitolul 1liceulteoreticdecebal-ct.ro/files/Programare-Baze-de-date--Oracle1.pdf · PROGRAMARE BAZE DE DATE ORACLE Capitolul 1 Prof. Cojocar-Horobăț

Cazuri de violare a constrângerilor

foreign-key

• Ştergerea unei linii cheie primară

• Inserarea unei linii cheie străină

• Actualizarea unei coloane cheie primară din

tabela primară

• Actualizarea unei coloane cheie străină din tabela

străină

Page 53: PROGRAMARE BAZE DE DATE ORACLE Capitolul 1liceulteoreticdecebal-ct.ro/files/Programare-Baze-de-date--Oracle1.pdf · PROGRAMARE BAZE DE DATE ORACLE Capitolul 1 Prof. Cojocar-Horobăț

Observaţie

• La crearea unei copii a unei tabele cu

CREATE TABLE….AS(SELECT…)

se vor copia liniile şi constrângerile NOT NULL,

dar NU se vor copia constrângerile cheie primară-

cheie străină.

Page 54: PROGRAMARE BAZE DE DATE ORACLE Capitolul 1liceulteoreticdecebal-ct.ro/files/Programare-Baze-de-date--Oracle1.pdf · PROGRAMARE BAZE DE DATE ORACLE Capitolul 1 Prof. Cojocar-Horobăț

VALORI DEFAULT

• Previn setarea valorilor NULL pentru coloane, dacă o linie este inserată fără specificarea explicită a unei valori pentru coloană

• Poate fi un literal, o expresie, o funcţie SQL(SYSDATE, USER), dar nu poate fi numele ueni alte coloane

• Valoarea explicită trebuie să aibă acelaşi tip cu cel al coloanei

• Putem specifica DEFAULT pentru o coloană, atunci când tabela este creată

Page 55: PROGRAMARE BAZE DE DATE ORACLE Capitolul 1liceulteoreticdecebal-ct.ro/files/Programare-Baze-de-date--Oracle1.pdf · PROGRAMARE BAZE DE DATE ORACLE Capitolul 1 Prof. Cojocar-Horobăț

Comanda MERGE

• Se foloseşte la tabele de dimensiuni foarte mari.

• Permite scanarea tabelului sursă, iar în tabelul

destinaţie face ori insert, ori update. Dacă

înregistrarea există, face update, dacă nu există, o

inserează.

• Se pot folosi aliasuri

Page 56: PROGRAMARE BAZE DE DATE ORACLE Capitolul 1liceulteoreticdecebal-ct.ro/files/Programare-Baze-de-date--Oracle1.pdf · PROGRAMARE BAZE DE DATE ORACLE Capitolul 1 Prof. Cojocar-Horobăț

Sintaxa comenzii MERGE MERGE INTO <tabel destinaţie> USING <tabel sursă sau subquery>

ON <condiţie>

WHEN MATCHED THEN UPDATE SET

<coloana destinaţie 1> = <coloana sursă | expresie>, <coloana destinaţie 2> = <coloana sursă | expresie>,

<coloana destinaţie n> = <coloana sursă | expresie>

WHEN NOT MATCHED THEN INSERT

(<coloană destinaţie 1 | expresie>, < coloană destinaţie 2 | expresie >, < coloană destinaţie n | expresie >)

VALUES

(<valoare 1>, <valoare 2>, <valoare n>)

Page 57: PROGRAMARE BAZE DE DATE ORACLE Capitolul 1liceulteoreticdecebal-ct.ro/files/Programare-Baze-de-date--Oracle1.pdf · PROGRAMARE BAZE DE DATE ORACLE Capitolul 1 Prof. Cojocar-Horobăț

Efectul

• Se citeşte o linie din sursă, ale cărei valori se compară cu

liniile destinaţiei, pe baza condiţiei.

• Dacă în destinaţie găsim o linie care se potriveşte, valorile

ei se vor modifica cu linia din sursă.

• Dacă nu se găseşte nici o linie, în destinaţie se va insera

linia din sursă.

Page 58: PROGRAMARE BAZE DE DATE ORACLE Capitolul 1liceulteoreticdecebal-ct.ro/files/Programare-Baze-de-date--Oracle1.pdf · PROGRAMARE BAZE DE DATE ORACLE Capitolul 1 Prof. Cojocar-Horobăț

• Bibliografie

https://academy.oracle.com