Scrigroup - Documente si articole

     

HomeDocumenteUploadResurseAlte limbi doc
AccessAdobe photoshopAlgoritmiAutocadBaze de dateCC sharp
CalculatoareCorel drawDot netExcelFox proFrontpageHardware
HtmlInternetJavaLinuxMatlabMs dosPascal
PhpPower pointRetele calculatoareSqlTutorialsWebdesignWindows
WordXml


MODIFICAREA DATELOR IN TABELE - ORACLE

baze de date



+ Font mai mare | - Font mai mic



MODIFICAREA DATELOR IN TABELE - ORACLE

Actualizarea liniilor

Declaratia UPDATE va permite sa schimbati valori in liniile unei tabele.



UPDATE tabela[alias]

SET coloana [, coloana]

[WHERE conditie];

De exemplu:

Pentru a actualiza linia lui Scott, introduceti:

UPDATE EMP

SET JOB='SALESMAN',

HIREDATE = SYSDATE,

SAL = SAL*1.1

WHERE ENAME = 'SCOTT';

1 record updated.

Daca clauza WHERE este omisa, toate liniile din tabela vor fi actualizate. Este posibil sa folositi subcereri inlantuite si subcereri corelate in decla- ratia UPDATE.

Sa presupunem ca ati avut o cifra noua de comisioane pentru angajati siguri. De exemplu, tabela COMMISSION de mai jos este folosita pentru a actualiza li- nii sigure ale tabelei EMP:

COMMISSION    EMP

EMPNO COMM EMPNO COMM

7499 1100 7499 300

7654 500 7654 1400

7844 3500 7844 0

7844 2000

7844 1500

Schimbarile listate in tabela COMMISSION pot fi aplicate tabelei EMP, folosind o subcerere corelata si o subcerere inlantuita, ca mai jos:

Exemplul 1:

UPDATE EMP

SET COMM = (SELECT COMM FROM COMMISSION C

WHERE C.EMPNO = EMP.EMPNO)

WHERE EMPNO IN (SELECT EMPNO FROM COMMISSION);

Tabela COMMISSION poate contine mai mult decat o intrare pentru fiecare angajat, ca in exemplul de mai jos :

COMISSION

EMPNO COMM

----- ----

7499 1100

7654 500

7654 100

7844 2000

7844 1500

Daca doriti sa inlocuiti (REPLACE) valorile din tabela EMP pentru comision cu comisionul TOTAL pentru fiecare angajat listat in tabela COMISSION, atunci puteti utiliza urmatorul SQL :

Exemplul 2:

UPDATE EMP

SET COMM = ( SELECT SUM(COMM) FROM COMISSION C

WHERE C.EMPNO = EMP.EMPNO)

WHERE EMPNO IN (SELECT EMPNO FROM COMISSION);

3 inregistrari modificate.

Tabela EMP reflecta comisioanele modificate :

EMP

EMPNO COMM

----- ----

7499 1100

7654 600

7844 3500

O alta posibilitate este cea de a adauga (ADD) la valorile comisionului in tabela COMISSION la comisioanele existente in tabela EMP mai mult decat inlocuirea lor. Exemplul 3 realizeaza acest lucru :

Exemplul 3:

UPDATE EMP

SET COMM = ( SELECT SUM(COMM) + EMP.COMM

FROM COMISSION C

WHERE C.EMPNO = EMP.EMPNO)

WHERE EMPNO IN (SELECT EMPNO FROM COMISSION);

Tabela EMP reflecta comisioanele schimbate :

EMP

EMPNO COMM

7844 3500

7499 1400

7654 2000

Stergerea Coloanelor dintr-o Tabela

Comanda DELETE permite stergerea unei sau mai multor linii dintr-o tabela.

DELETE FROM tabela

[WHERE conditie];

Pentru a sterge toate informatiile despre departamentul 10 din tabela EMP, introduceti :

DELETE FROM EMP

WHERE DEPTNO = 10;

Daca clauza WHERE este omisa, atunci toate liniile vor fi sterse.

IMAGINI (VIEWS)

Ce este o Imagine ?

  • O imagine este ca o fereastra prin intermediul careia datele din tebele pot fi vizualizate sau schimbate.
  • O imagine este derivata dintr-o alta imagine sau tabela la care este referita ca tabela de baza a imaginii - o tabela 'reala' cu date care sunt stocate fizic.
  • O imagine este stocata doar ca o secventa SELECT. Este o tabela virtuala - adica este o tabela care nu exista fizic, dar ii apare utilizatorului ca si cum ar exista.
  • O imagine nu are date proprii. Ea manipuleaza datele din tabela de baza asociata.

Imaginile sunt utile pentru urmatoarele scopuri :

  • Ingradirea accesului la o baza de date. Selectand dintr-o imagine (VIEW) putem afisa o parte restransa din baza de date.
  • Permite utilizatorilor sa faca cereri simple pentru obtinerea de rezultate din cereri complicate. De exemplu, imaginile permit utili- zatorilor sa selecteze informatii din tabele multiple fara cunoas- terea mecanismelor instructiunii JOIN.
  • Furnizeaza independenta datelor pentru useri ad-hoc si programele aplicatiilor. O imagine poate fi utilizata pentru a extrage trans- parent date din mai multe tebele. De asemenea imaginile permit ca aceleasi date sa fie vazute de utilizatori diferiti in feluri dife- rite.

Imagini Simple vs. Imagini Complexe

Clasificarea unei imagini simple :

  • furnizeaza date dintr-o singura tabela
  • nu contine functii sau grupuri (GROUP) de date.

O imagine complexa poate fi compusa din date care sunt :

  • furnizate din mai multe tabele
  • contine functii sau grupuri de date.

Comanda CREATE VIEW

CREATE [ OR REPLACE ] [FORCE] VIEW nume-view

[(coloana1, coloana2, )]

AS

SELECT secventa-select

[WITH CHECK OPTION [CONSTRAINT nume_constr]]

Coloana1, coloana2, etc. sunt numele date coloanelor in imaginesi trebiue sa corespunda elementelor din lista selectata.

Pentru a crea o imagine simpla numita D10EMP, care contine unele detalii ale angajatilor din Departamentul 10, introduceti :

CREATE VIEW D10EMP

AS

SELECT EMPNO,ENAME,SAL

FROM EMP

WHERE DEPTNO = 10;

Cand o imagine este creata, un mesaj este afisat : 'View created.'

Imaginea poate fi utilizata ca orice tabela :

SELECT *

FROM D10EMP

ODRER BY ENAME;

Pentru a crea o imagine complexa numita DEPT_SUMMARY, care contine functii de grup si date din doua tabele :

CREATE VIEW DEPT_SUMMARY

( NAME, MINSAL, MAXSAL, AVSAL )

AS

SELECT DNAME, MIN(SAL), MAX(SAL), AVG(SAL)

FROM EMP,DEPT

WHERE EMP.DEPTNO = DEPT.DEPTNO

GROUP BY DNAME;

De notat faptul ca numele coloanelor alternative au fost specificate pentru imagine. Aceasta este o cerinta pentru cazul cand elementele SELECTate nu sunt conforme cu conventia denumirilor din tabele / coloane, sau daca orice coloana din imagine este derivata dintr-o functie sau expresie.

De notat si faptul ca daca o coloana este utilizata intr-o cerere (ANNSAL), o imagine a unui alias al coloanei ( nume alternativ pentru coloana in imagine ) nu e necesar. De exemplu :

CREATE VIEW DEPT20

AS

SELECT ENAME, SAL*12 ANNSAL

FROM EMP

WHERE DEPTNO = 20;

O imagine nu poate contine clauza ORDER BY. Clauza ORDER BY este specificata cand se executa SELECT din imagine.

Optiunea OR REPLACE

Aceasta optiune permite ca o imagine sa fie creata chiar daca exista una cu acelasi nume, astfel inlociundu-se vechea varianta a imaginii pentru proprietarul ei. Aceasta inseamna ca o imagine poate fi alterata fara a fi abandonata, recreandu-se si redand privilegiile obiectului.

Optiunea FORCE

Aceasta optiune creaza o imagine chiar daca tabela de baza nu exista, sau sunt prea putine drepturi pentru tabela respectiva. Oricum, tabela trebiue sa existe inainte ca imaginea sa poata fi utilizata.

Utilizarea unei Imagini cu Operatii DML

Imaginile sunt facilitati puternice deoarece ele ne permit sa executam verificari de integritate referentiale asupra datelor modificate prin utilizarea imaginilor.

Clauza WITH CHECK OPTION specifica faptul ca INSERT si UPDATE executate pein intermediul imaginii nu permit crearea de linii noi pe care imaginea nu le poate selecta, si de aceea mermite constrangerile de integritate si vreificarile validarilor de date sa fie fortate asupra datelor ce vor fi inserate sau actualizate.

In urmatorul exeplu, o imagine numita D10EMP este creata cu WITH CHECK OPTION. Aceasta inseamna ca doar linii care au DEPTNO = 10 pot fi inserate, actualizate sau sterse. Adica nici o secventa DML nu poate sa adreseze imaginea decat daca conditiile clauzei imaginii sunt indepli- nite.

CREATE VIEW D10EMP

AS

SELECT EMPNO, ENAME, DEPTNO

FROM EMP

WHERE DEPTNO = 10

WITH CHECK OPTION;

Daca exista o incercare de a executa actiuni DML asupra liniilor pe care imaginea nu le poate selecta intr-o claiza WHERE, se afiseaza eroare :

'ORA_01402 VIEW WITH CHECK OPTION

WHERE_Clause voilation.'

Urmatorul exemplu va valida intratea oricarei comenzi INSERT/UPDATE astfel incat numarul SAL sa fie intre 1000 si 2000, MGR va trebui sa aibe campul EMPNO valid, si DEPTNO sa existe in tabela DEPT.

CREATE VIEW EMP_DATA

AS

SELECT EMPNO, ENAME, JOB, MGR, SAL, DEPTNO

FROM EMP

WHERE SAL BETWEEN 1000 AND 2000

AND MGR IN ( SELECT DISTINCT EMPNO

FROM EMP )

AND DEPTNO IN ( SELECT DEPTNO

FROM DEPT )

WITH CHECK OPTION;

Pentru a crea o imagine care sa restranga accesul la detaliile personale ale unui angajat valid in tabela EMP, si timpul de acces la orele de servici, atunci introduceti urmatoarea comanda :

CREATE VIEW EMP_DETAILS

AS

SELECT EMPNO, ENAME, JOB, DEPTNO

FROM EMP

WHERE ENAME = USER

AND TO_CHAR(SYSDATE,'HH24') BETWEEN 9 AND 17

AND TO_CHAR(SYSDATE,'D') BETWEEN 2 AND 6

WITH CHECK OPTION;

Cand creati o imagine cu WITH CHECK OPTION, trebiue s-i atribuiti un nume restrictiei WITH CHECK OPTION.

CREATE VIEW EMPLOYEES( ID_NUMBER, NAME, DEPARTMENT)

AS

SELECT EMPNO, ENAME, JOB, DEPTNO

FROM EMP

WHERE DEPTNO IN ( SELECT DISTINCT DEPTNO FROM DEPT)

WITH CHECK OPTION CONSTRAINT DEPT_CHECK;

Aceasta restrictie previne inserarea unei coloane in tabela EMP cu un numar care nu exista in tabela DEPT.

Cand comanda CREATE VIEW este executata in seventa SELECT care urmeaza AS nu e executata; in loc este doar depozitata in dictionarul de date.

Cand accesati date, via o imagine, ORACLE executa urmatoarele operatii :

  • recupereaza definitia imaginii din dictionarul de date
  • verifica drepturile de acces
  • converteste cererea imaginii intr-o operatie echivalenta asupra tabelei sau tabelelor asociate. Cu alte cuvinte, datele sunt recu- perate din, sau o actualizare este facuta asupra, tabelei(lor) de baza.

Odata ca imaginea a fost creata, trebuie sa se execute o cerere la Tabela Dictionarului de Date numita USER_VIEWS ca sa se vada conanda view.

Acesti parametrii SETabili vor influienta afisarea imaginii text :

  • Maxdata
  • Arraysize
  • Long

Imaginea text este memorata intr-o coloana de tipul de date Long si ar trebui setat ARRAYSIZE la o valoare mica ( de ex. 1 ) pentru a vizualiza textul.

Modificarea Datelor prin Imagini

Dupa cum am discutat, restrictiile pot fi impuse cu ajutirul clauzei WITH CHECK OPTION cand o imagine este creata. Mai sunt si alte constrangeri de care trebiue sa fiti atenti.

DELETE este interzis cand o imagine contine :

  1. conditie Join
  2. functii de grup
  3. clauza GROUP BY
  4. comanda DISTINCT
  5. ROWNUM (nr de ordine al randului dupa ce acesta a fost adus din baza de date).

UPDATE este interzis cand :

  1. Oricare de mai sus
  2. Coloane definite prin expresii ( de ex. SAL*12 )

INSERT este interzis cand :

  1. Oricare de mai sus
  2. Orice NOT NULL coloane nu sunt selectate de imagine ( ex. EMPNO )

Comanda DROP VIEW

Utilizati comanda DROP pentru a sterge o imagine. Aceasta comanda elimina definitia imaginii din baza de date. Coloanele si liniile nu sunt afectate deoarece sunt stocate in tabelele de unde a derivat fiecare ima- gine. Imaginile sau alte aplicatii bazate pe o imagine stearsa devin in- valide.

De notat ca o imagine poate fi derivata dintr-o tabela sau de fapt dintr-o alta imagine !

Sintaxa DROP este :

DROP VIEW nume_imagine;

Doar creatorul imaginii poate sa o stearga.

TRANZACTII

Procesarea unei Tranzactii

Ce este o tranzactie ?

O tranzactie este o operatie asupra unei baze de date care implica una sau mai multe modificari in una sau mai multe tabele.

Exista doua clase de tranzactii. Tranzactii DML care contin un numar oarecare de blocuri DML si pe care ORACLE le trateaza ca o singura entitate sau o singura unitate logica de lucru, si tranzactii DDL care contin un singur bloc DDL.

Nu pot exista situatii 'jumatate de drum' in timpul executiei unei tranzactii, asa incat unele modificari specificate in tranzactie sa fie aplicate bazei de date si altele nu. Pentru fiecare tranzactie ori toate modificarile sunt aplicate bazei de date, ori nici una din modificari nu este indeplinita ( sunt toate abandonate - discarded ).

O tranzactie incepe cand prima comanda executabila DML sau DDL este intalnita si se termina in una din urmatoarele situatii :

  • Intalneste COMMIT/ROLLBACK
  • Comanda DDL se termina
  • Anumite erori (DEADLOCK)
  • EXIT - iesire din SQL*Plus
  • Eroare sistem

Un bloc DDL este executat automat si de aceea implicit incheie o tranzactie.

Dupa incheierea unei tranzactii, urmatorul bloc executabil SQL va lansa automat urmatoarea tranzactie.

Permanentizarea Modificarilor

Pentru ca modificarile sa ramana permanente, ele trebiue executate asupra bazei de date. comanda COMMIT realizeaza permanentizarea modificari- lor; ROLLBACK permite sa abandonam sau sa anulam modificarile. Modifiacrea, sau modificarile, executate asupra bazei de date intre 2 comenzi COMMIT reprezinta o tranzactie. Pana cand tranzactia nu este executata, nici una din modificari nu este vizibila utilizatorilor.

Inlaturarea Modificarilor Nedorite

Modificarile neexecutate pot fi abandonate prin comanda ROLLBACK. ROLLBACK va atribui datelor valorile care acestea le aveau imediat dupa executarea ultimului COMMIT prin anularea tuturor modificarilor facute dupa ultimul COMMIT.

Erorile de Sistem

Cand o tranzactie este intrerupta de o eroare serioasa, de exemplu o eroare de sistem, intreaga tranzactie este anulata. Aceasta previne erorile datorate modificarilor nedorite asupra datelor, si realizeaza intoarcerea tabelelor la starile de dupa ultimul COMMIT. In acest fel SQL*Plus protejea- za integritatea tabelelor.

Anularea automata este cauzata cel mai des de catre o eroare de sistem, ca de exemplu o resetare a sistemului sau o cadere de tensiune. Erorile de tastare a comenzilor, ca de exemplu tastarea gresita a unor nume de coloane sau incercarile de a realiza operatii neautorizate asupra tabelelor altor utilizatori, nu intrerup tranzactia si nu realizeaza anu- larea automata. Aceasta se datoreaza faptului ca aceste erori sunt detectate in cursul compilarii (de catre PARSER) ( cand un bloc SQL este scanat si verificat), si nu in timpul executiei.

O tranzactie noua este lansata urmand unui COMMIT sau ROLLBACK - adica cand primul bloc executabil DML sau DDL este intalnit.

Semnificatia Tranzactiilor

ORACLE asigura consistenta datelor bazata pe tranzactii. Tranzacti ile dau utilizatorului mai multa flexibilitate si control la lucrul asupra datelor, si asigura consistenta datelor in cazul unei erori a procesului utilizator sau a unei erori de sistem.

Tranzactiile ar trebui sa contina doar acele comenzi DML care realizeaza o singura modificare asupra datelor. De exemplu un transfer de fonduri (sa spunem 1000$) intre 2 conturi ar trebui sa implice un debit al unui cont de 1000$ si un credit al altui cont de 1000$. Ambele actiuni ar trebui sa se incheie cu succes sau sa dea eroare impreuna. Creditul nu ar trebui executat fara debit.

Controlul Tranzactiilor cu Instructiuni SQL

Urmatoarele instructiuni SQL sunt utilizate cand apar executii (commit) sau refaceri (rollback) :

  • COMMIT[WORK]
  • SAVEPOINT nume_savepoint
  • ROLLBACK[WORK] to [SAVEPOINT] nume_savepoint

De notat ca COMMIT si ROLLBACK sunt instructiuni (blocuri) SQL.

Cele 3 blocuri SQL utilizate pentru controlul tranzactiilor sunt explicate mai jos:

COMMIT[WORK]

Sintaxa : COMMIT[WORK];

  • Permanentizeaza schimbarile in tranzactia curenta
  • Sterge toate punctele de salvare (savepoint) din tranzactie
  • Termina tranzactia
  • Elibereaza toate blocarile (Lock) tranzactiei
  • Cuvantul cheie WORK este optional
  • Utilizatorul trebuie sa expliciteze sfarsitul tranzactiei in programul aplicatie utilizand COMMIT (sau ROLLBACK). Daca nu se executa explicit tranzactia si programul se termina anormal, ultima tranzactie executata va fi anulata.
  • Executii implicite (commit) apar in urmatoarele situatii :
    • inainte de o comanda DDL
    • dupa o comanda DDL
    • la inchiderea mormala a unei baze de date

Blocurile DDL cauzeaza mereu executii (commit) in timpul executiei lor. Daca introduceti un bloc DDL dupa cateva blocuri DML, blocul DDL cauzeaza aparitia unui commit inaintea propriei executii, incheind tranzactia curenta. Astfel daca blocul DDL este executat pana la capat, este si inregistrat.

SAVEPOINT

Sintaxa : SAVEPOINT nume_savepoint

Exemplu :

SAVEPOINT terminare_actualizari

  • Poate fi utilizat pentru a imparti o tranzactie in bucati mai mici
  • Punctele de salvare (savepoints) permit utilizatorului sa retina toata munca sa la orice moment din timp, cu optiunea de a inregistra mai tarziu totul sau a anula totul sau o parte din ea. Astfel, pentru o tran- zactie lunga, se pot salva parti din ea, pe masura executiei, la sfarsit inregistrandu-se sau refacandu-se continutul initial. La aparitia unei erori nu trebuie executat din nou fiecare bloc.
  • La crearea unui nou punct de salvare cu acelasi nume ca al unuia dinainte, primul punct este sters.
  • Numarul maxim de puncte de salvare pentru un proces utilizator este implicit 5. Aceasta limita poate fi schimbata.

ROLLBACK[WORK] to [SAVEPOINT] nume_punct_salvare

  • Instructiunea ROLLBACK este utilizata pentru a reface un lucru.
  • Cuvantul cheie 'work' este optional. Intoarcerea la un punct de salvare este de asemenea optionala.
  • Daca se utilizeaza ROLLBACK fara clauza TO SAVEPOINT, atunci :
    • se termina tranzactia
    • se anuleaza modificarile din tranzactia curenta
    • sterge toate punctele de salvare din tranzactie
    • elibereaza blocarile tranzactiei

Intoarcerea la Nivel de Bloc

O parte a unei tranzactii poate fi anulata. Daca un singur bloc DML da eroare, ORACLE V6 va intoarce inapoi doar acel bloc. Aceasta facilitate este cunoscuta ca STATEMENT LEVEL ROLLBACK. Intoarcerea la nivel de bloc inseamna daca un singur segment DML da eroare la executia unei tranzactii, efectul lui este anulat, dar schimbarile realizate de precedentul bloc DML in tranzactie nu vor fi anulate si pot fi inscrise (COMMIT) sau intoarse (ROLLBACK) explicit de catre utilizator.

Daca blocul este unul de tip DDL, inscrierea (commit) care precede imediat acest bloc nu este anulata (schimbarile au fost facute deja permanen- te). ORACLE realizeaza intoarcerea la nivel de bloc prin crearea unui punct de salvare implicit inainte de executarea fiecarei comenzi DML. Utilizatorul nu poate referi caest punct de salvare in mod direct.

Astfel, daca va intoarceti la un punct de salvare, atunci:

  • anulati o parte din tranzactie
  • se retine punctul de salvare pentru intoarcere, dar se pierd toate celelalte punct create dupa punctul de salvare numit.
  • se elibereaza toate blocarile de tabele si linii.

Intoarceri Implicite

Intoarcerile implicite apar cand se intalnesc terminari anormale ale executiei (de exemplu cand se intrerupe un proces utilizator). Intoarcerile implicite la nivel de bloc apar la eroarea de executie a unui bloc.

Este recomandat ca tranzactiile sa se termine explicit utilizand COMMIT[WORK] ori ROLLBACK[WORK].

Urmatorul exemplu demonstreaza utilizarea unui punct de salvare, si a instructiunilor ROLLBACK si COMMIT.

INSERT INTO DEPT

VALUES

( 50, 'TESTING', 'LAS VEGAS' );

SAVEPOINT insert_done;

UPDATE DEPT

SET DNAME = 'MARKETING';

ROLLBACK TO insert_done ( modificarile sunt abandonate );

UPDATE DEPT

SET DNAME = 'MARKETING' ( revizuim comanda UPDATE )

WHERE DNAME = 'SALES';

COMMIT;

AUTOCOMMIT

COMMIT sau ROLLBACK pot fi date manual sau automat prin utilizarea optiunii AUTOCOMMIT a comenzii SET. Optiunea AUTOCOMMIT controleaza cand schimbarile intr-o baza de date sunt facute permanente.

Exista doua setari :

COMANDA + DESCRIEREA

SET AUTO[COMMIT] ON

COMMIT este utilizat automat la fiecare INSERT, UPDATE sau DELETE

SET AUTO[COMMIT] OFF

COMMIT poate fi utilizata de utilizator explicit. De asemenea, COMMIT se executa cand apare comanda Z (specifica VAX), cand se executa comenzile DROP, ALTER sau CREATE, sau la iesirea din SQL*Plus. ROLLBACK poate fi executat explicit de catre utilizator pentru refacerea bazei de date.

De retinut ca SET este o comanda SQL*Plus.

Consistenta la Citire

Utilizatorii bazelor de date fac doua tipuri de accesuri asupra bazelor de date:

  • Operatii de citire ( SELECT )
  • Operatii de scriere ( INSERT, UPDATE, DELETE )

Cititorului si scriitorului unei baze de date trebuie sa i se garanteze o vedere consistenta asupra bazei de date. Cititorii nu trebuie sa vizulaizeze o data care este in curs de modificare. Si scriitorii trebuie sa fie siguri ca schimbarile intr-o baza de date sunt facute intr-un mod consistent : schimbarile facute de un scriitor sa nu distruga sau sa intre in confilct cu schimbarile pe care le face un alt scriitor.

Scopul consistentei la citire este acela de a asigura faptul ca fiecare utilizator vede data ca fiind cea de la ultimul COMMIT, inainte ca o operatie DML sa inceapa.

Consistenta la citire este implementata prin tinerea unor copii partiale ale bazei de date in segmente de intoarcere (ROLLBACK).

Cand de executa operatii de scriere intr-o baza de date, ORACLE va face o copie a datelor onainte de schimbare si o va scrie intr-un segment de intoarcere.

Toti cititorii, exceptandu-i pe cei care au facut schimbarile, inca mai vad baza de date care exista inainte ca schimbarile sa fie facute - ei vad segmentul de intoarcere de fapt.

Oricum, inainte ca schimbarile sa fie facute permanente in baza de date, doar utilizatorul care modifica datele poate sa vada baza de date cu alteratiile incorporate. Toti ceilalti vad baza nemodificata ( fereastra din segmentul de intoarcere ). Aceasta garanteaza citirea unor date consistente care nu fac subiectul unor modificari in curs.

Cand un bloc DML se executa, schimbarile facute in baza de date devin vizibile oricarui utilizator care executa SELECT. Modificarile sunt facute 'universale' si acum toti utilizatorii vad baza de date cu modificarile incorporate.

Spatiul ocupat de catre 'vechile' date in segmentul de intoarcere este eliberate pentru a fi reutilizat.

Daca tranzactia este anulata (ROLLBACK), atunci toate schimbarile sunt 'anulate' :

  • Versiunea veche ('originala') a bazei de date aflata in segmentul de intoarcere este scrisa inapoi ('recuperata') in baza de date.
  • Toti utilizatorii vad baza de date existenta inainte de inceperea tranzactiei.

Tranzactii de Citire

Implicit, modelul consistent al ORACLE RDBMS garanteaza ca rezultatul executiei unui bloc este consistenet. Oricum, in anumite situatii se poate dori chestionarea unor blocuri multiple asupra datelor din mai multe tabele si se doreste asigurarea ca datele sunt consistente. Adica, re- zultatele in orice tabela sunt consistente in timp in raport cu rezultatele din orice alta tabela.

Linia SQL : SET TRANSACTION READ ONLY este utilizata pentru a incepe o tranzactie de citire exclusiv.

Consistenta la citire pe care READ ONLY o furnizeaza este implementa- ta in acelasi fel cu consistenta la nivel de bloc - utilizand segmente de intoatcere. Fiecare bloc vede implicit o fereastra consistenta a datelor la momentul inceperii blocului. Aceasta facilitate este foarte folositoare pentru rapoarte care ruleaza mai multe chestionari asupra mai multor tabele in timp ce alti utilizatori actualizeaza aceleasi tabele.

Note :

      • SET TRANSACTION READ ONLY este utilizata pentru a incepe o tran- zactie doar de citire.
      • Doar cereri ( blocuri SELECT ) sunt permise. Comenzile DML nu sunt permise. SELECT FOR UPDATE va genera o eroare.
      • O instructiune COMMIT, ROLLBACK, sau un bloc DDL va termina tran- zactia de citire ( de retinut ca blocurile DDL genereaza implicit suprascrieri - COMMIT ). Cu blocuri DDL, nu este data nici o indi- catie referitoare la faptul ca tranzactia se termina implicit.
      • In timpul tranzactiei de citire, toate cererile se refera la aceeasi copie a bazei de date ( schimbarile sunt efectuate inainte ca tranzactia de citire sa inceapa).
      • Alti utilizatori pot continua sa citeasca sau sa modifice datele.

Urmatoarele seturi de instructiuni pot fi rulate pentru a extrage datele din tabelele EMP si DEPT.

COMMIT;

SET TRANSACTION READ ONLY;

SELECT DEPTNO, ENAME, JOB

FROM EMP;

SELECT DEPTNO, DNAME

FROM DEPT;

COMMIT;

Ultimul COMMIT este necesar pentru a termina explicit tranzactia de citire.



Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 1288
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved