Tutorialspoint PLSQL
Tutorialspoint PLSQL
{ESTI|AI}
ÎNCEPE
procedure_body
FINALIZAREprocedură_nume;
Unde,
Cuvântul cheie AS este folosit în locul cuvântului cheie IS pentru a crea un standalone
procedură
Exemplu
CREAȚ I SAU ÎNLOCUIȚ I PROCEDURA saluturi
AS
ÎNCEPE
dbms_output.put_line('Salut lume!');
SFÂRȘ IT;
produci rezultatul următor arătat de–
ÎNCEPUT
salutări
FINALIZARE;
Proceduradeș tergere
DECLARAȚ IE
un număr
b număr;
numărul c;
ÎNCEPE
z:=x;
ALTUL
z:=y;
ENDIF;
Sfârș it;
ÎNCEPE
a:=23;
b:=45;
găseș teMin(a,b,c);
SFÂRȘ IT;
un număr
ÎNCEP
x:=x*x;
SFÂRȘ IT;
ÎNCEPUT
a:=23;
patratNum(a);
SFÂRȘ IT;
Funcț ie
Sintaxa pentru instruț iunea CREATE FUNCTION este următoarea:-
Unde,
Lista parametrilor opț ionali conț ine numele, modul ș i tipurile parametrilor.
IN reprezintă valoarea care va fi transmisă din exterior ș i OUT reprezintă
parametru care va fi folosit pentru a returna o valoare în afara procedurii.
Clauza RETURN specifică tipul de date pe care inten ț ionaț i să-l returna ț i din
funcț ie.
Cuvântul cheie AS este folosit în locul cuvântului cheie IS pentru a crea un element de sine stătător
funcț ie.
ÎNCEPE
SELECT count(*)intototal
DIN clienț i;
ÎNTORCE total;
SFÂRȘ IT;
DECLARE
c număr(2);
ÎNCEPE
c:=totalCustomers();
SFÂRȘ IT;
Exemplu
DECLEARE
un număr;
numărul b;
c număr;
RETURN număr
ESTE
numărul z;
ÎNCEPE
z:=x;
ALTUL
Z:=y;
ENDIF;
RETURN z;
FINALIZARE;
ÎNCEPE
a:=23;
b:=45;
c:=găseș teMax(a,b);
SFÂRȘ IT;
Cursori
Oracle creează o zonă de memorie, cunoscută sub numele de zona de context.
Acursoris este un pointer către zona de context this. PL/SQL controlează contextul
zonă printr-un cursor.
Un cursor reț ine rândurile (una sau mai multe) returnate de o instrucț iune SQL.
Cursori implici
Cursorii explici
CursoriImplici
Cursorii implici sunt creaț i automat de Oracle.
Nu există un cursor explicit pentru instrucț iune. Programatorii nu pot
controlează cursorele implicite ș i informaț iile din acestea.
Operaț iunile INSERT, cursorul deț ine datele care trebuie inserate.
Pentru operaț iunile UPDATE ș i DELETE, cursorul identifică rândurile
asta ar fi afectat
Atribut
%GĂSIT
1 Returnează ADEVĂRAT dacă o instrucț iune INSERT, UPDATE sau DELETE a afectat unul sau
mai multe linii sau o declara ț ie SELECT INTO a returnat una sau mai multe linii.
%INEXISTENT
3 Întotdeauna întoarce FALSE pentru cursori implici, deoarece Oracle închide SQL-ul
cursorul se închide automat după executarea instrucț iunii SQL asociate.
%ROWCOUNT
Exemplu:
DECLARĂ
număr(2)
ÎNCEPE
UPDATE clienț i
SET salariu=salariu+500;
Dacă sql%nu_a_foarte_atins_atunci
total_rows:=sql%rowcount;
ENDIF;
SFÂRȘ IT;
Cursoriiexplici
Cursori explici sunt cursori definiț i de programatori pentru a obț ine mai mult
control asupra zonei de context.
Un cursor explicit ar trebui să fie definit în secț iunea de declaraț ie a
Bloc PL/SQL.
Este creat pe o declaraț ie SELECT care returnează mai mult de un rând.
CURSOR c_customers IS
DESCHIDE c_customers;
ÎNCHIDE c_customers;
Exemplu
DECLARE
c_id [Link]%tip;
c_addr [Link]%tip;
ÎNCEPE
DESCHIDE c_customers;
CICLU
ÎNCHIDE c_customers;
SFÂRȘ IT;
DECLARA
c_id [Link]%tip;
c_name [Link]%tip;
c_addr [Link]%tip;
CURSOR c_customersis
ÎNCEPE
DESCHIDE c_customers;
BUCLOȘ
FETCH c_customersintoc_id,c_name,c_addr;
ENDLOOP;
ÎNCHIDE c_customers;
SFÂRȘ IT;
Înregistrări
Un record este o structură de date care poate conț ine elemente de date de diferite tipuri.
tipuri.
Registrele constau din diferite câmpuri, similare cu o linie dintr-o bază de date
masă.
Pe baza tabelelor
Înregistrări bazate pe cursor
Pe baza tabelei
%ROWTYPE atributul permite unui programator să creeze un tabel-
înregistrări bazate pe bază ș i pe cursor.
Exemplu:
DECLARE
client_rec clienti%tiprow;
ÎNCEPE
DIN clienț i
UNDE id=5;
FINALIZARE;
DECLARA
CURSOR customer_curis
id
DIN clienț i;
customer_rec customer_cur%tip_rând;
ÎNCEPUT
DESCHIDE client_cur;
BUCLOADER
FETCH customer_curintocustomer_rec;
DBMS_OUTPUT.put_line(customer_rec.id||' '||customer_rec.nume);
SFÂRȘ IT CICLU;
SFÂRȘ IT;
Înregistrăridefinitedeutilizator:
Tip de înregistrare definit de utilizator care vă permite să definiț i diferitele
structuri de înregistrare.
Aceste înregistrări constau în domenii diferite,
Presupunem că doriț i să ț ineț i evidenț a cărț ilor dvs. într-o bibliotecă.
următoarele atribute despre fiecare carte -
Titlu
Autor
Subiect
ID carte
Sintaxa tipurilor de înregistrare −
TIP
TIPUL_NUMELUI ESTE ÎNREGISTRARE
DECLAR
(titlu varchar(50),
autor varchar(50)
subiect varchar(100)
id_caracter număr);
carte1 cărț i;
carte2 cărț i;
Accesarea acestui câmp
DECLARĂ
(titlu varchar(50),
autor varchar(50)
subiect varchar(100)
id_carte număr);
carte1 cărț i;
carte2 cărț i;
ÎNCEPE
Specificaț ii carte1
Programare C
Nuha Ali
Tutorial de Programare C
book1.book_id:=6495407;
--Cartea2specificaț ii
Facturarea Telecomunicatiilor
Zara Ali
book2.book_id:=6495700;
--CarteaTiparita1inregistrare
SFÂRȘ IT;
Excepț ii
Sintaxăpentrugestionareaexcepț ilor
Excepț ia implicită va fi gestionată folosind WHEN others THEN.
DECLARĂ
ÎNCEPE
<comandă executabilă>
EXCEPȚ IE
<gestiune a excepț iilor aici>
........
CÂND alț ii AȘ A
FINALIZARE;
Exemplu:
DECLAR
c_id [Link]%tip:=8;
c_name [Link]%tip;
c_addr [Link]%tip;
ÎNCEPE
DIN clienț i
UNDE id=c_id;
DBMS_OUTPUT.PUT_LINE('Nume: '||c_name);
DBMS_OUTPUT.PUT_LINE('Adresă: '||c_addr);
EXCEPȚ IE
dbms_output.put_line('Eroare!');
SFÂRȘ IT;
RidicareaExcepț ilor:
Serverul de baze de date automat de fiecare dată când există o bază de date internă
eroare, dar excepț iile pot fi ridicate explicit de programator prin
folosind comanda RAISE
Sintaxa excepț iei definite de utilizator
DECLARĂ
EXCEPȚ IE
ÎNCEPE
ENDIF;
EXCEPȚ IE
declaraț ie
SFÂRȘ IT;
Exemplu :
DECLARĂ
c_id [Link]%tip;
c_nume [Link]%tip;
c_addr [Link]%tip;
-- excepț ie definită de utilizator
ÎNCEPE
Dacă c_id <= 0 atunci
RIDICA ex_invalid_id;
ALTFEL
SELECT nume, adresă ÎNTO INTO c_nume, c_adresă
DIN clienț i
UND e = c_id;
EXCEPȚIE
dbms_output.put_line('Eroare!');
SFÂRȘ IT;
DECLARĂ
c_nume [Link]%tip;
ÎNCEPUT
DACĂ c_id<=0 ATUNCI
RIDICĂ ex_invalid_id;
ALTFEL
DE LA clienț i
UNDE id=c_id;
DBMS_OUTPUT.PUT_LINE('Nume: '||c_name);
DBMS_OUTPUT.PUT_LINE('Adresă: '||c_addr);
ENDIF;
EXCEPȚ IE
dbms_output.put_line('Eroare!');
SFÂRȘ IT;
Declanș atoare
Beneficiile triggerelor
Declanș atoarele pot fi scrise pentru următoarele scopuri −
[OF nume_col]
PE numele_tabelei
CAND(conditie)
DECLARĂ
Declaraț ii-declarative
ÎNCEPE
Declaraț ii executabile
EXCEPȚ IE
SFÂRȘ IT;
Unde,
CREAȚ I [SAU ÎNLOCUIȚ I] TRIGGER nume_trigger − Creează sau înlocuieș te un trigger existent
declanș ator cu numele_declanș ator.
[REFERIRE LA VECHI CA o NOI CA n] - Acest lucru vă permite să faceț i referire la valori noi ș i vechi
[PENTRU FIECARE RANG] - Acesta specifică un trigger la nivel de rang, adică triggerul va fi
executat pentru fiecare rând afectat. Altfel, triggerul se va executa o singură dată
când instrucț iunea SQL este executată, ceea ce se numeș te un trigger la nivel de tabel.
CÂND (condiț ie) − Aceasta oferă o condiț ie pentru rânduri pentru care declanș atorul ar fi
foc. Această clauză este valabilă doar pentru declanș atoare la nivel de rând.