0% au considerat acest document util (0 voturi)
25 vizualizări17 pagini

Note PL/SQL

PL/SQL este o extensie procedurală a SQL dezvoltată de Oracle, care integrează strâns programarea procedurală cu gestionarea bazelor de date. Limbajul suportă variabile, condiții, excepții și permite dezvoltarea de proceduri stocate, funcții și blocuri anonime. PL/SQL include, de asemenea, pachete predefinite pentru diverse operațiuni și oferă structuri de control precum bucle și declarații condiționale.

Încărcat de

ScribdTranslations
Drepturi de autor
© © All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca PDF, TXT sau citiți online pe Scribd
0% au considerat acest document util (0 voturi)
25 vizualizări17 pagini

Note PL/SQL

PL/SQL este o extensie procedurală a SQL dezvoltată de Oracle, care integrează strâns programarea procedurală cu gestionarea bazelor de date. Limbajul suportă variabile, condiții, excepții și permite dezvoltarea de proceduri stocate, funcții și blocuri anonime. PL/SQL include, de asemenea, pachete predefinite pentru diverse operațiuni și oferă structuri de control precum bucle și declarații condiționale.

Încărcat de

ScribdTranslations
Drepturi de autor
© © All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca PDF, TXT sau citiți online pe Scribd

PL/SQL (Limbaj Procedural/Limbaj de Interogare Structurat)

PL/SQL (Limbaj Procedural/Limbaj de Interogare Structurat) esteOracle Corporation's


extensie procedurală proprietară laSQLbază de datelimbă, folosit înOracle
bază de dateCâteva alte SQLsisteme de gestionare a bazelor de dateoferi extensii similare la
Limbaj SQL. PL/SQLsintaxăasemănă puternic cu cea aAda, ș i la fel ca Ada
compilatoare din anii 1980 sistemul de rulare PL/SQL folose ș teDianaca intermediar
reprezentare.Punctul forte cheie al PL/SQL este integrarea sa strânsă cu Oracle
database.PL/SQL este una dintre cele trei limbaje integrate în Oracle Database, celelalte două
fiind SQL ș iJava.

Istorie
PL/SQL a apărut pentru prima dată înOracle Formsv3. Câț iva ani mai târziu, a fost inclus în
theOracle Databaseserver v7 (ca proceduri de bază de date, funcț ii, pachete, declanș atoare ș i
blocuri anonime) urmate deOracle Reportsv2.

Funcț ionalitate
PL/SQL suportă următoarele:variabile, condiț ii, arrays, ș excepț
i ii.
Implementările din versiunea 8 a Oracle Database încoace au inclus caracteristici
asociat cuorientare obiect.

Funcț iile SQL de bază ca unlimbaj declarativ. SQL standard—spre deosebire de unele
limbaje de programare funcț ionalănu necesită implementări pentru a convertiapeluri de final
la salturi. Standardul deschis SQL nu oferă în mod obiș nuit "prima linie" ș i "restul tabelei"
accesorii, ș i nu poate efectua cu uș urinț ă unele construcț ii precumbuclucă. PL/SQL, totuș i,
ca uncomplet Turinglimbaj procedural care umple aceste goluri, permite baza de date Oracle
dezvoltatori pentru a interacț iona cu bazabază de date relaț ionalăîntr-o manieră imperativă.
Declaraț iile SQL pot efectua apeluri explicite în linie la funcț ii PL/SQL sau pot cauza PL/SQL
declanș atoarea trage asupra predefinitLimbaj de manipulare a datelor(DML) evenimente.

PL/SQLproceduri stocate(funcț ii, proceduri, pachete ș i declan ș atoare) care efectuează


DML este compilat într-o bază de date Oracle: până la acest punct, codul lor SQL poate suferi
verificarea sintaxei. Programatorii care lucrează într-un mediu de bază de date Oracle pot construi
PL/SQLblocuride funcț ionalitate pentru a servi caproceduri, funcț ii; sau pot scrie inline
segmente de PL/SQL în cadrulSQL*Plusscripturi.

În timp ce programatorii pot încorpora cu uș urinț ă instrucț iuni SQL DML în PL/SQL (ca ș i cursor
definiț ii, de exemplu, sau utilizând sintaxa SELECT ... INTO),Limbaj de Definire a Datelor
(DDL) instruc ț iunile precum CREATE TABLE/DROP INDEX etc. necesită utilizarea de
SQL dinamic. Versiunile anterioare ale Oracle Database necesită utilizarea unui complex încorporat
DBMS_SQLpachet pentru SQL dinamic unde sistemul trebuie să analizeze explicit ș i
executa o declaraț ie SQL. Versiuni ulterioare au inclus unEXECUTĂ IMEDIATsintaxă
numit „SQL dinamic nativ”, care simplifică considerabil lucrurile. Orice utilizare a DDL în
o bază de date Oracle va duce la un angajament implicit. Programatorii pot folosi, de asemenea, dinamic
SQL pentru a executa DML unde nu cunosc conț inutul exact al afirmaț iei în
avansează.

PL/SQL oferă mai multe pachete predefinite pentru scopuri specifice. Astfel de pachete PL/SQL
inclus

• DBMS_OUTPUT - pentru operaț iuni de ieș ire către destinaț ii non-bază de date
• DBMS_JOB - pentru a rula proceduri/funcț ii specifice la un moment dat (de exemplu.
programare
• DBMS_XPLAN - pentru formatarea ieș irii "Explain Plan"
• DBMS_SESSION - oferă acces la SQL ALTER SESSION ș i SET ROLE
declaraț ii ș i alte informaț ii din sesiune.
• DBMS_METADATA - pentru extragerea metadatelor din dicț ionarul de date (cum ar fi
Declaraț ii DDL
• UTL_FILE - pentru citirea ș i scrierea fiș ierelor pe disc
• UTL_HTTP - pentru a face cereri către servere web din baza de date
• UTL_SMTP - pentru trimiterea de emailuri din baza de date (printr-un server SMTP)

Oracle Corporation adaugă în mod obiș nuit mai multe pachete ș i/sau îmbunătăț eș te funcț ionalitatea pachetelor
cu fiecare lansare succesivă a Oracle Database.

Structura de bază a codului

Programele PL/SQL constau din proceduri, funcț ii ș i blocuri anonime. Fiecare dintre
acestea sunt formate din unitatea de bază PL/SQL care estebloc. Blocurile iau generalul
formă

DECLARE
-- Bloc de declaraț ie (opț ional)
ÎNCEPE
-- Program corect
EXCEPȚ IE
-- Tratarea excepț iilor (opț ional)
SFÂRȘ IT
/* Comentariu exemplar ce se întinde
linii multiple... */

Observaț i că blocurile pot fi încorporate în interiorul altor blocuri.

TheDECLARAsecț iunea specificătipuri de datede variabile, constante, colecț ii ș i utilizator-


tipuri definite.

Blocul dintreÎNCEPEș iSFÂRȘ ITspecifice cod procedural executabil.

Excepț ii, erori care apar în timpul executării codului, au unul dintre cele două tipuri:
1. excep ț ii predefinite
2. excep ț ii definite de utilizator.

Programatorii trebuie să ridice excepț ii definite de utilizatori în mod explicit. Ei pot face asta folosind
comanda RAISE, cu sintaxa:

RIDICĂ <numele excepț iei>

Oracle Corporation a predefinit mai multe excep ț ii precumNU_S-A_GĂSIT_DATE,


PREA_MULTE_RÂNDURI, etc. Fiecare excepț ie are un număr de eroare SQL ș i un mesaj de eroare SQL
asociate cu acesta. Programatorii pot accesa aceste prin folosireaSQLCODE ș iSQLERRM
funcț ii.

Secț iunea DECLARE defineș te ș i (opț ional) iniț ializează variabile. Dacă nu este iniț ializată
în mod specific, acestea se setează implicit la NULL.

De exemplu:

DECLARA
number1 NUMĂR(2);
NUMĂR(2) := 17;
Salut lume
DATA := SYSDATE; -- data ș i ora curentă
ÎNCEPE
SELECT numărul_străzii
ÎN NUMĂRUL1
ADRESĂ DE LA
UNDE numele = 'Smith';
SFÂRȘ IT;

Simbolul := funcț ionează ca un operator de asignare pentru a stoca o valoare într-o variabilă.

de dateîn PL/SQL include NUMĂR, ÎNTREG, CHAR, VARCHAR2,


Principalultipuri
DATĂ, TIMESTAMP, TEXT etc.
Funcț ii

Funcț iile în PL/SQL sunt o colecț ie deSQLș i instrucț iuni PL/SQL care efectuează o sarcină
ș i ar trebui să returneze o valoare mediului apelant.

CREAȚ I SAU REVEDEȚ I FUNCTIA <function_name>


SUNT/SUNT
{Declaraț ia variabilelor}
{declaraț ia CONSTANT}
RETURN tip_returnare

ÎNCEPE

Bloc Pl/SQL;

EXCEPȚ IE

Bloc EXCEPȚ IE;

SFÂRȘ IT;

Variabile numerice

variable_name număr(P[,S]) := valoare;

Pentru a defini o variabilă numerică, programatorul adaugă tipul de variabilăNUMBERla


definiț ia numelui. Pentru a specifica precizia (opț ională) (P) ș i scalarea (opț ională) (S), se poate
"Precizie" în acest context
se referă la numărul de cifre pe care variabila le poate reț ine, „precizia” se referă la numărul de
cifre care pot urma punctului decimal.)

O selecț ie de alte tipuri de date pentru variabilele numerice ar include:

float binar
numeric, real, smallint, binary_integer

Variabile de caracter

nume_variabil varchar2(L) := 'Text';

Pentru a defini o variabilă de caracter, programatorul adaugă de obicei tipul variabilei


VARCHAR2 la definiț ia numelui. În paranteze urmează numărul maxim de
caractere pe care variabila le poate stoca.

Alte tipuri de date pentru variabilele de caracter includ:

varchar, char, long, raw, long raw, nchar, nchar2, clob, blob, bfile
Variabile de dată

data := '01-Ian-2005';

Oracle oferă o serie de tipuri de date care pot stoca date (DATE, DATETIME,
TIMESTAMP etc), totuș i DATE este cel mai frecvent utilizat.

Programatorii definesc variabile de dată prin ataș area codului de tip de date "DATE" la o variabilă
nume. TheDATA_INfuncț ia poate fi utilizată pentru a converti ș iruri în valori de dată. Funcț ia
transformă prima frază între ghilimele într-o dată, folosind ca definiț ie a doua frază între ghilimele,
de exemplu:

DATA('31-12-2004','zz-ll-aaaa')

sau

DATA ('31-Dec-2004','zz-lun-aaaa', 'NLS_DATE_LANGUAGE = American')

Pentru a converti datele în ș iruri, se folose ș te func ț iaTO_CHAR (data_string,


format_string).

Tipuri de date pentru coloane specifice

Variable_name Table_name.Column_name%tip;

Această sintaxă defineș te o variabilă de tipul coloanei referite pe referite


mese.

Programatorii specifică tipuri de date definite de utilizator cu sintaxa:

tip tip_date este înregistrare (câmp_1 tip_1 :=xyz, câmp_2 tip_2


:=xyz, ..., câmp_n tip_n :=xyz);

De exemplu:

DECLARĂ
TIP t_adresa ESTE ÎNREGISTRARE (
nume adresă.nume%TIP
adresa.strada%TIP
numărul_străzii address.street_number%TIP
cod poș tal address.cod_poș tal%TIP);
v_adresa
ÎNCEPUT
SELECT nume stradă număr_stradal cod poș tal ÎN v_adresa DE LA
adresa UNDE ROWNUM = 1;
SFÂRȘ IT;
Acest program exemplu îș i defineș te propriul tip de date, numit t_address, care conț ine câmpurile
nume

aș adar, conform exemplelor, suntem capabili să copiem datele din baza de date în câmpuri în
program. Folosind acest tip de date, programatorul a definit o variabilă numită v_adresă ș i
l-a încărcat cu date din tabela ADDRESS.

Programatorii pot accesa atributele individuale dintr-o astfel de structură prin intermediul punctului.
notare, astfel: "v_address.street := 'High Street';"

Declaraț ii condiț ionale


Segmentul de cod următor arată construcț ia IF-THEN-ELSIF. ELSIF ș i ELSE
păr ț ile sunt op ț ionale, astfel că este posibil să se creeze condi ț ii IF-THEN sau IF-THEN-ELSE mai simple
construcț ii.

Dacă x = 1 ATUNCI
secvenț ă_de_declaraț ii_1;
DACA x = 2 ATUNCI
secvenț ă_de_devise_2;
ELSIF x = 3 ATUNCI
secvenț a_de_afirmaț ii_3;
ELSIF x = 4 ATUNCI
secvenț a_de_afirmatii_4;
ELSIF x = 5 ATUNCI
secvenț a_de_declaraț ii_5;
ALTFEL
secvenț a_de_afirmaț ii_N;
SFÂRȘ IT DACĂ;

Declaraț ia CASE simplifică unele structuri mari IF-THEN-ELSE.

CAZ
CÂND x = 1 ATUNCI secvenț a_de_instrucț iuni_1;
CÂND x = 2 ATUNCI secvenț a_de_instrucț iuni_2;
CAND x = 3 ATUNCI secvenț a_de_instrucț iuni_3;
CÂND x = 4 ATUNCI secvenț a_de_instrucț iuni_4;
CAND x = 5 ATUNCI secvenț a_de_instrucț iuni_5;
ALTFEL secvenț a_de_instrucț iuni_N;
ÎNCHEIE CAZUL;

Declaraț ia CASE poate fi utilizată cu un selector predefinit:

CAS x
CĂND 1 ATUNCI secvenț a_de_declaratii_1;
CAND 2 ATUNCI secvenț a_de_instrucț iuni_2;
CAND 3 ATUNCI secvenț a_de_instrucț iuni_3;
CÂND 4 ATUNCI secvenț a_de_instrucț iuni_4;
CĂND 5 ATUNCI secvenț a_de_declaraț ii_5;
ALTFEL secvenț a_de_instrucț iuni_N;
ÎNCHIDE CAZUL;
Gestionarea array-urilor

PL/SQL se referă laarray-urica "colecț ii". Limbajul oferă trei tipuri de colecț ii:

Tabele indexate (array-uri associative)


2. Tabele imbricate
3. Varrays (matrici de dimensiuni variabile)

Programatorii trebuie să specifice o limită superioară pentru varray-uri, dar nu este necesar pentru tabelele indexate.
pentru tabele imbricate. Limba include mai multe colecț iimetodefolosit pentru a manipula
elementele colec ț iei: de exemplu PRIMUL, ULTIMUL, URMĂTORUL, PRECEDENTUL, EXTINDERE, TRIMARE,
Ș tergeț i, etc. Tabelele indexate pot fi folosite pentru a simula arrays asociative, ca în aceasta
exemplu de funcț ie memo pentru funcț ia Ackermann în PL/SQL.

Ciclare
Ca un limbaj procedural prin definiț ie, PL/SQL oferă mai multeiterareconstructe
inclusiv declaraț ii de bază LOOP,Buclele WHILE, Bucle FOR, ș i buclele Cursor FOR.

Declaraț ii LOOP

Sintaxă:

CICLU
declaraț ie1;
declaraț ie2;
FINALIZARE CICLU;

Loop-urile pot fi terminate folosindIEȘ IREcuvânt cheie, sau prin ridicarea unuiexcepț ie.

Bucle WHILE

Sintaxă:

BUCLOOP
...fă ceva...
SFÂRȘ ITUL CICLULUI;
Buclă FOR

Bucla FOR cu cursor

PENTRU RecordIndex ÎN (SELECT person_code DIN people_table)


Bucle
DBMS_OUTPUT.PUT_LINE(RecordIndex.person_code);
FINALIZAȚ I CICLUL;

Bucllele cursor-for deschid automat un cursor, citesc datele lor ș i închid din nou cursorul.

Ca alternativă, programatorul PL/SQL poate predefini interogarea SELECT a cursorului


în avans, pentru a permite reutilizarea sau pentru a face codul mai uș or de înț eles
(în special util în cazul interogărilor lungi sau complexe).

DECLARA
CURSOR cursor_person ESTE
SELECT cod_persoană DIN tabel_persoane;
ÎNCEPUT
PENTRU RecordIndex ÎN cursor_person
BUCLOTE
DBMS_OUTPUT.PUT_LINE(RecordIndex.person_code);
ÎNCHID LOOP;
FINALIZARE;

Exemplu
DECLARĂ
var NUMĂ;/* acest "var" nu este în acelaș i domeniu cu "var" din ciclul for
o referinț ă la "var" după "end loop;" ar găsi-i
valoarea să fie null */
ÎNCEPE
/*Atenț ie. pentru ciclul variabile în pl/sql sunt nou declaraț ii, cu
domeniu doar în interiorul buclei */
PENTRU var ÎN 0 ..10 LOOP
DBMS_OUTPUT.put_line(var);
FINALIZAȚ I CICLUL;
SFÂRȘ IT;

0
1
2
3
4
5
6
7
8
9
10
Tipuri de date numerice

Tip de date Oracle 9i Oracle 10g Oracle 11g Explicaț ie


Sintaxă (dacă este cazul)
număr(p,s) Precizia poate Precizia poate Precizia poate Unde este precizia și este
variază de la 1 la variază de la 1 la variază de la 1 la scară.
38. 38. 38.
Scara poate varia De exemplu, numărul(7,2) este un număr
de la -84 la 127. de la -84 la 127. de la -84 la 127. care are 5 cifre înainte de zecimală și
2 cifre după zecimală.
numeric(p,s) Precizia poate Precizia poate Precizia poate Unde este precizia și este
variază de la 1 la variază de la 1 la variază de la 1 la scară.
38. 38. 38.
De exemplu, numeric(7,2) este un număr
care are 5 cifre înainte de zecimală și
2 cifre după virgulă.
float
dec(p,s) Precizia poate Precizia poate Precizia poate Unde este precizia și este
variaza de la 1 la variaza de la 1 la variaza de la 1 la scară.
38. 38. 38.
De exemplu, dec(3,1) este un număr care
are 2 cifre înainte de virgulă și 1
digit după virgulă.
decimal(p,s) Precizia poate Precizia poate Precizia poate Unde este precizia și este
variază de la 1 la variază de la 1 la variază de la 1 la scară.
38. 38. 38.
De exemplu, decimal(3,1) este un număr
care are 2 cifre înainte de zecimal și
1 cifră după virgulă.
Tipuri de date caracter
Tip de date Oracle 9i Oracle 10g Oracle 11g Explicaț ie
Sintaxă (dacă este cazul)
char(dimensiune)Dimensiune maximă Dimensiune maximă Dimensiune maximă Unde este numărul de
de 2000 de octeti. de 2000 de bytes. de 2000 de biți. caractere de stocat. Lungime fixă
șiruri. Umplute cu spațiu.

nchar(dimensiune)
Dimensiune maximă Dimensiune maximă Dimensiune maximă Unde este numărul de
de 2000 de octeti. de 2000 de biți. de 2000 de biți. caractere de stocat. NLS de lungime fixă
șir cu spații adăugate.
nvarchar2(size) Dimensiunea maximă Dimensiunea maximă Dimensiunea maximă Unde size este numărul de
de 4000 de octeți. de 4000 de octeți. de 4000 de octeți. caractere de stocat. Lungime variabilă
Șir NLS.
varchar2(size) Dimensiunea maximă Dimensiunea maximă Dimensiunea maximă Unde size este numărul de
de 4000 de octeți. de 4000 de octeți. de 4000 de octeți. caractere de stocat. Lungime variabilă
șir.
Scrierea unui program simplu

Cel mai simplu tip de cod PL/SQL se numește bloc anonim.


Un bloc anonim este un bloc de cod care are propria sa structură DECLARE/BEGIN/END.
Blocurile anonime pot fi fie independente (așa cum este prezentat aici), fie pot fi incluse în orice alt cod PL/SQL
program.
Sintaxa generală pentru un bloc anonim:
declara
...
<Partea de declaraț ie>
...
începe
...
<Partea procedurală>
...
excepț ie
...
<Handler de excepț ii>
...
sfârș it;
1. Secțiunea de declarație definește toate variabilele, cursori, subprogramele și alte elemente care vor fi folosite în
cod.
2. Secțiunea de declarație este opțională.
3. Secțiunea procedurală conține corpul principal al rutinei.
4. Secțiunea procedurală începe cu cuvântul cheie begin și se termină cu cuvântul cheie exception sau end
cuvânt cheie dacă nu aveți secțiune de excepție.
5. Secțiunea procedurală este singura parte obligatorie a codului.
6. Trebuie să aveți cel puțin o linie de cod executabil în secțiunea procedurală.
7. Puteți folosi comanda NULL pentru a indica că nu ar trebui să se execute nimic.
8. Secțiunea de excepții este de asemenea opțională.

9. Secțiunea de excepție permite programului să intercepteze și să proceseze excepțiile.


Cursorii
Folosesti un cursor atunci când ai o declarație SELECT care returnează mai mult de un rând din baza de date.
Un cursor este, de fapt, un set de rânduri la care poți avea acces unul câte unul.
Recuperați rândurile în cursor folosind instrucțiunea SELECT și apoi preluați rândurile din cursor.
Puteți urma cinci pași atunci când folosiți un cursor:
1. Declarați variabile pentru a stoca valorile coloanelor din declarația SELECT.
2. Declară cursorul, specificând instrucțiunea ta SELECT.
3. Deschide cursorul.
4. Recuperați rândurile din cursor.

5. Închide cursorul.
Sintaxa pentru declararea unui cursor este următoarea:
CURSOR cursor_name ESTE
SELECT_statement;
unde
numele_cursorului specifică numele cursorului.
SELECT_statement este o instrucțiune SELECT.
Deschizi un cursor folosind instrucțiunea OPEN, care trebuie plasată în secțiunea executabilă a blocului.
Pentru a citi fiecare rând din cursor, poți folosi instrucțiunea FETCH.
Declarația FETCH citește valorile coloanelor în variabilele pe care le specificați;
FETCH foloseș te următoarea sintaxă:
FETCH cursor_name
ÎN variable[, variable ...];
Unde
1. numele_cursorului specifică numele cursorului.

2. variabila este o variabilă declarată anterior în care sunt introduse valorile din instrucțiunea SELECT a cursorului.
stocat.
Odată ce ai terminat cu cursorul, ultimul pas este să închizi cursorul folosind instrucțiunea CLOSE.
Închiderea cursorilor tăi eliberează resursele sistemului
Funcții
O funcție este similară cu o procedură, cu excepția faptului că o funcție trebuie să returneze o valoare.
Creezi o funcție folosind instrucțiunea CREATE FUNCTION.
Sintaxa simplificată pentru declarația CREATE FUNCTION este următoarea:
CREAȚI[SA ÎNLOCUIȚI] FUNCȚIA nume_funcț ie
[(numele_parametrului [IN | OUT | IN OUT] tip [, ...])]
Tip RETURN
{ESTE | SUNT}
ÎNCEPE
corpul_functiei
SFÂRȘ ITfuncț ie_nume;
Unde
1. OR REPLACE specifică funcția care urmează să înlocuiască o funcție existentă, dacă este prezentă.
2. tipul specifică tipul PL/SQL al parametrului.

3. Corpul unei funcții trebuie să returneze o valoare de tip PL/SQL specificată în clauza RETURN.

Declanșatori
Un trigger este o procedură care este rulată automat de baza de date atunci când se efectuează un INSERT, UPDATE DML SQL specificat.
sau instrucțiunea DELETE este executată împotriva unui tabel.
Declanșatoarele sunt utile pentru a face lucruri precum auditarea avansată a modificărilor efectuate asupra valorilor coloanelor dintr-un tabel.
Când se activează un Trigger
1. Un trigger poate fi activat înainte sau după ce instrucțiunea SQL rulează.
2. O declanșare poate fi executată o dată pentru fiecare rând afectat. O astfel de declanșare este cunoscută sub numele de declanșare la nivel de rând.
3. Un trigger poate fi rulat pentru toate rândurile. Un astfel de trigger este cunoscut sub numele de trigger la nivel de declarație.
4. Un trigger la nivel de rând are acces la valorile vechi și noi ale coloanelor atunci când triggerul este activat ca rezultat al unei
Declarația UPDATE pe acea coloană.

5. De asemenea, declanșarea unui declanșator poate fi limitată folosind o condiție de declanșare.


Diverse evenimente pot declanșa un trigger, dar aceste evenimente sunt întotdeauna împărțite în trei grupuri:
1. Declanșatoare DML,
2. ÎN LOCUL declanșatoarelor, și

3. declanșatoare de evenimente ale sistemului.


Declanșatoarele DML sunt declanșatoarele pe operațiunile de INSERT/UPDATE/DELETE în orice tabel.
Începerea și încheierea unei tranzacții

Așa cum s-a menționat, tranzacțiile sunt unități logice de muncă pe care le folosești pentru a împărți activitățile tale de bază de date.
O tranzacție are atât un început, cât și un sfârșit.
O tranzacție începe atunci când unul dintre următoarele evenimente are loc:
1. Te conectezi la baza de date și efectuezi prima declarație DML.

2. O tranzacție anterioară se încheie și introduci o altă instrucțiune DML.


O tranzacție se încheie când unul dintre următoarele evenimente are loc:
1. Executați o instrucțiune COMMIT sau ROLLBACK.
2. Efectuezi o instrucțiune DDL, cum ar fi o instrucțiune CREATE TABLE, caz în care un COMMIT este
efectuat automat.
3. Efectuezi o afirmație DCL, cum ar fi o afirmație GRANT, caz în care un COMMIT este efectuat automat.
realizat.
4. Te deconectezi de la baza de date.
5. Dacă ieși din SQL*Plus în mod normal introducând comanda EXIT, un COMMIT este efectuat automat pentru
tu.
6. Dacă SQL*Plus se încheie anormal, un ROLLBACK este efectuat automat.

7. Efectuezi o declarație DML care eșuează, caz în care se efectuează automat un ROLLBACK pentru aceasta.
declarație DML individuală.

Crearea unui utilizator


Pentru a crea un utilizator în baza de date, folosești instrucțiunea CREATE USER.
Sintaxa simplificată pentru instrucțiunea CREATE USER este următoarea:
CREAZĂ UTILIZATOR user_name IDENTIFICAT PRIN parola
[TABELA DE IMAGINE DEFAULT default_tablespace]
[TABELA TEMPORARĂ temp_tablespace];
Unde
1. Dacă omiteți un tablespace implicit, se folosește tablespace-ul implicit SYSTEM.
2. Spațiile de tabel sunt folosite de baza de date pentru a separa obiectele.
3. temp_tablespace specifică tablespace-ul implicit unde sunt stocate obiectele temporare.

4. Dacă omiteți un tabel temporal, se folosește tabelul de sistem implicit.


1.Ce este o tranzacț ie?

O tranzacție este un set de instrucțiuni SQL între orice două COMMIT și ROLLBACK
declarații.

2.Ce este implicitcursorș i cum este folosit de Oracle?

Un cursor implicit este un cursor care este creat intern de Oracle. Este creat de Oracle
pentru fiecare individSQL.

3.Ce este PL/SQL?

Răspuns: PL/SQL este extensia de limbaj procedural a Oracle pentru SQL. Limbajul include obiecte
orientatprogramaretehnici precum încapsularea, suprascrierea funcțiilor, ascunderea informațiilor
(toate, cu excepția moștenirii), și astfel, aduce programare de vârf la baza de date Oracleserverși
o varietate de instrumente Oracle.

4.Există o limită asupra dimensiunii unui bloc PL/SQL?

Răspuns: În prezent, dimensiunea maximă analizată/compilată a unui bloc PL/SQL este de 64K și maximul
dimensiunea codului este de 100K. Puteți rula următoarea declarație select pentru a interoga dimensiunea unui existent
pachet sau procedură. SQL> select * from dba_object_size where name = 'numele_procedurii'

5.Cum pot să îmi protejez PL/SQLcod sursă?

Răspuns: PL/SQL V2.2, disponibil cu Oracle7.2, implementează un wrapper binar pentru PL/SQL
programe pentru a proteja codul sursă. Acest lucru se face printr-o utilitate independentă care transformă
Codul sursă PL/SQL în cod obiect binar portabil (puțin mai mare decât originalul). În acest fel
poți distribuisoftwarefără a fi nevoie să vă faceți griji cu privire la expunerea algoritmilor dumneavoastră proprietari și
metodele SQL*Plus și SQL*DBA vor înțelege și vor ști în continuare cum să execute astfel de scripturi. Doar
fii atent, nu există comanda "decode" disponibilă. Sintaxa este: înfășurați iname=myscript.sql
xxxx.yyy

6.Poate cineva să folosească SQL dinamic în cadrul PL/SQL? SAU Poț i folosi un DDL într-o procedură? Cum?

Răspuns: Din PL/SQL V2.1 se poate folosi pachetul DBMS_SQL pentru a executa SQL dinamic
declarații.
Ex: CREAZĂ SAU ÎNLOCUIEȘTE PROCEDURA DYNSQL CA
cur integer;
rc număr întreg;
ÎNCEPE
cur := DBMS_SQL.OPEN_CURSOR;
DBMS_SQL.PARSE(cur,'CREAȚI TABELA X (Y DATA)', DBMS_SQL.NATIVE);
rc := DBMS_SQL.EXECUTE(cur);
DBMS_SQL.CLOSE_CURSOR(cur);
SFÂRȘIT;

S-ar putea să vă placă și