Sunteți pe pagina 1din 27

O procedura:

Este un tip de subprogram care efectuează o acțiune


Pot fi stocate în baza de date ca obiect de schemă
Promovează reutilizarea și întreținerea
Parametri:
1.IN (implicit) oferă valori pentru procesarea unui subprogram.
2.OUT returnează o valoare apelantului.
3.IN OUT furnizează o valoare de intrare, care poate fi returnată
(ieșire) ca valoare modificată.
Variabilă gazdăHost
Este declarată și există externă la subprogramul PL / SQL.
O variabilă gazdă poate fi creată în:
iSQL * Plus utilizând comanda VARIABLE
Beneficiile subprogramelor
Întreținere ușoară
Securitatea și integritatea datelor îmbunătățite
Performanta imbunatatita
Claritate îmbunătățită a codului
CREATE OR REPLACE PROCEDURE query_emp
(id IN employees.employee_id%TYPE,
name OUT employees.last_name%TYPE,
salary OUT employees.salary%TYPE) IS
BEGIN
SELECT last_name, salary INTO name, salary
FROM employees
WHERE employee_id = id;
END query_emp
DECLARE
emp_name employees.last_name%TYPE;
emp_sal employees.salary%TYPE;
BEGIN
query_emp(171, emp_name, emp_sal); ...
END;
O functie:
Este un bloc denumit PL / SQL care returnează o valoare
Pot fi stocate în baza de date ca obiect de schemă pentru
executarea repetată
Avantaje ale funcțiilor definite de utilizator în instrucțiunile
SQ
Poate extinde SQL unde activitățile sunt prea complexe, prea
ciudate sau nu sunt disponibile cu SQL
Poate crește eficiența atunci când este utilizat în clauza WHERE
pentru a filtra date, spre deosebire de filtrarea datelor din
aplicație
Poate manipula valorile datelor

Funcțiile definite de utilizator acționează ca funcții


încorporate într-un singur rând și pot fi utilizate în:
Lista SELECT sau clauza unei interogări
Expresii exprese ale clauzelor WHERE și HAVING
Clauzele CONNECT BY, START WITH, ORDER BY și
GROUP BY ale unei interogări
Clauza VALUES a instrucțiunii INSERT
Clauza SET a instrucțiunii UPDATE

Restricții la funcțiile de apelare din expresiile SQL

Funcțiile definite de utilizator care sunt apelate din expresii SQL


trebuie:
Fie stocate în baza de date
Acceptați numai parametrii IN cu tipuri de date SQL valabile,
nu tipuri specifice PL / SQL
Întoarceți tipuri de date SQL valabile, nu tipuri specifice PL /
SQL
Atunci când apelați funcții în instrucțiunile SQL:
Parametrii trebuie să fie specificați cu notație pozițională
Trebuie să dețineți funcția sau să aveți privilegiul EXECUTE
Funcții chemate de la:
O instrucțiune SELECT nu poate conține instrucțiuni DML
O instrucțiune UPDATE sau DELETE pe un tabel T nu poate
interoga sau conține DML pe aceeași tabelă T
Instrucțiunile SQL nu pot încheia tranzacțiile (adică nu pot
executa operații COMMIT sau ROLLBACK)
Notă: Apelurile către subprograme care încalcă aceste restricții
nu sunt, de asemenea, permise în funcție.

CREATE OR REPLACE FUNCTION get_sal


(id employees.employee_id%TYPE) RETURN NUMBER
IS
sal employees.salary%TYPE := 0;
BEGIN
SELECT salary
INTO sal
FROM employees
WHERE employee_id = id;
RETURN sal;
END get_sal;
/
Instrucțiuni pentru scrierea pachetelor
1. Construiți pachete de uz general.
2. Definiți specificația pachetului înaintea corpului.
Specificația pachetului ar trebui să conțină doar acele
construcții pe care doriți să le faceți publice.
3. Plasați elementele în partea de declarație a corpului de
pachete atunci când trebuie să le mențineți într-o sesiune
sau în cadrul tranzacțiilor.
4. Modificările specificației pachetului necesită recompilarea
fiecărui subprogram de referință.
5. Specificația pachetului ar trebui să conțină cât mai puține
constructe posibil.
Avantajele utilizării pachetelor
1. Modularitate: încapsularea construcțiilor conexe
2. Menținerea mai ușoară a funcționalității logice
3. Proiectare mai ușoară
4. Ascunderea informațiilor:
5. Doar declarațiile din specificația pachetului sunt vizibile și
accesibile aplicațiilor.
6. Construcțiile particulare din corpul pachetului sunt ascunse
și inaccesibile.
7. Toate codurile sunt ascunse în corpul pachetului.
8. Funcționalitate adăugată: Persistența variabilelor și a
cursorilor
9. Performanță mai bună:
10. Există o singură copie în memorie pentru toți utilizatorii.
11. Ierarhia de dependență este simplificată.
12. Suprasarcină: mai multe subprograme cu același nume

Funcția de supraîncărcare în PL / SQL:


1. Vă permite să creați două sau mai multe subprograme
cu același nume
2. Necesită ca parametrii formali ai subprogramului să
difere în familia de numere, ordine sau tip de date
3. Vă permite să construiți modalități flexibile de
invocare a subprogramelor cu date diferite
4. Oferă o modalitate de a extinde funcționalitatea fără a
pierde codul existent
5. Notă: Supraîncărcarea poate fi efectuată cu
subprograme locale, subprograme de pachete și
metode de tip, dar nu cu subprograme independente.
Functiile pachetelor pot fi folosite in instructiunile SQL.
Funcții chemate de la:
 solicitare sau o instrucțiune DML nu trebuie să pună
capăt tranzacției curente, să creeze sau să revină la un
punct de salvare sau să modifice sistemul sau sesiunea
 O instrucțiune sau o instrucțiune DML paralelizată nu
poate executa o instrucțiune DML sau nu poate
modifica baza de date
 O instrucțiune DML nu poate citi sau modifica tabelul
modificat de acea instrucțiune DML
Notă: Nu este permisă o funcție de apelare a subprogramelor
care încalcă restricțiile precedente.

CREATE OR REPLACE PACKAGE taxes_pkg IS


FUNCTION tax (value IN NUMBER) RETURN
NUMBER;
END taxes_pkg;
/
CREATE OR REPLACE PACKAGE BODY taxes_pkg IS
FUNCTION tax (value IN NUMBER) RETURN NUMBER
IS
rate NUMBER := 0.08;
BEGIN
RETURN (value * rate);
END tax;
END taxes_pkg;
/

Colecția de variabile de pachete și valorile definesc starea


pachetului.
Starea pachetului este:
Inițializat :când pachetul este încărcat pentru prima dată
Implicit: pentru durata sesiunii Stocat în zona Global User
(UGA) Unic pentru fiecare sesiune
Pot fi modificate când se solicită subprogramul de pachete sau
variabilele publice sunt modificate Nu este persistentă pentru
sesiune, ci pentru durata de apel a unui subprogram, atunci când
se utilizează PRAGMA SERIALLY_REUSABLE în
specificația pachetului
CREATE OR REPLACE PACKAGE BODY curs_pkg IS
CURSOR c IS SELECT employee_id FROM employees;
PROCEDURE open IS
BEGIN
IF NOT c%ISOPEN THEN OPEN c; END IF;
END open;
FUNCTION next(n NUMBER := 1) RETURN BOOLEAN
IS
emp_id employees.employee_id%TYPE;
BEGIN
FOR count IN 1 .. n LOOP
FETCH c INTO emp_id;
EXIT WHEN c%NOTFOUND;
DBMS_OUTPUT.PUT_LINE('Id: ' ||(emp_id));
END LOOP;
RETURN c%FOUND;
END next;
PROCEDURE close IS BEGIN
IF c%ISOPEN THEN CLOSE c; END IF;
END close;
END curs_pkg;
PL / SQL wrapper-ul este un utilitar de sine stătător, care
ascunde internele aplicațiilor prin conversia codului sursă PL /
SQL în codul obiect portabil.
Împachetarea are următoarele caracteristici:
Independența platformei
Încărcare dinamică
Legarea dinamică
Controlul dependenței
Importarea și exportul normale când sunt invocate
1. Reguli de impachetare
Trebuie să înpachetam numai corpul pachetului, nu
specificația pachetului.
2. Împachetarea poate detecta erori sintactice, dar nu poate
detecta erori semantice.
3. Fișierul de ieșire nu trebuie editat. Mențineți codul sursă
original și împachetați din nou după cum este necesar.
Pachetele furnizate de Oracle:
Sunt furnizate cu serverul Oracle
Extindeți funcționalitatea bazei de date
Activați accesul la anumite funcții SQL care sunt în mod normal
restricționate pentru PL / SQL
De exemplu, pachetul DBMS_OUTPUT a fost inițial conceput
pentru a depana programele PL / SQL.

Iată o listă abreviată a unor pachete furnizate de Oracle:


dbms_alert DBMS_LOCK DBMS_SESSION DBMS_OUTPUT
HTP UTL_FILE UTL_MAIL DBMS_SCHEDULER
1. Pachetul DBMS_OUTPUT vă permite să trimiteți mesaje
din subprograme și declanșatoare stocate.
2. PUT și PUT_LINE plasează textul în buffer.
3. GET_LINE și GET_LINES citiți tamponul.
Mesajele nu sunt trimise decât după terminarea expeditorului.
Utilizați SET SERVEROUTPUT pentru a afișa mesajele în
iSQL * Plus.
Pachetul UTL_FILE extinde programele PL / SQL pentru a citi
și a scrie fișiere text de sistem de operare.
UTL_FILE: Oferă o versiune restricționată a fișierului flux de
sistem de operare I / O pentru fișierele text Poate accesa fișierele
din directoarele sistemului de operare definite printr-o
instrucțiune CREATE DIRECTORY. De asemenea, puteți
utiliza parametrul bazei de date utl_file_dir

Exceptii
Este posibil să fiți nevoit să rezolvați una dintre aceste excepții
atunci când utilizați subprograme
UTL_FILE: INVALID_PATH INVALID_MODE
INVALID_FILEHANDLE INVALID_OPERATION EROARE
LA CITIRE WRITE_ERROR EROARE INTERNĂ Cealaltă
excepție nu în pachetul UTL_FILE este: NO_DATA_FOUND și
VALUE_ERROR

Procedurile pachetului HTP generează etichete HTML. Pachetul


HTP este folosit pentru a genera dinamic documente HTML și
poate fi invocat din: Un browser care utilizează servicii Oracle
HTTP Server și PL / SQL Gateway (mod_plsql) Un script iSQL
* Plus pentru a afișa ieșirea HTML
Pentru a crea un fișier HTML cu iSQL * Plus, efectuați
următorii pași:
1. Creați un script SQL cu următoarele comenzi:
2. SET SERVEROUTPUT ON
3. ACCEPT procname PROMPT "Procedure: "
4. EXECUTE &procname
5. EXECUTE owa_util.showpage
6. UNDEFINE proc
7.
2. Încărcați și executați scriptul în iSQL * Plus, furnizând valori
pentru variabilele de substituție.
3. Selectați, copiați și inserați textul HTML generat în browser
într-un fișier HTML.
4. Deschideți fișierul HTML într-un browser.
Pachetul UTL_MAIL:
Este un utilitar pentru gestionarea mesajelor de poștă electronică
care include astfel de funcții de e-mail utilizate în mod curent ca
atașamente, CC, BCC și primirea înapoi
Necesită setarea parametrului de inițializare a bazei de date
SMTP_OUT_SERVER
Oferă următoarele proceduri:
TRIMITE pentru mesaje fără atașamente
SEND_ATTACH_RAW pentru mesajele cu atașamente binare
SEND_ATTACH_VARCHAR2 pentru mesajele cu atașamente
text

. Utilizați pachetul DBMS_SCHEDULER pentru a crea un job


cu:
1.Un nume de job unic
2.Un program ("what" ar trebui să fie executat)
3.Un program ("when" ar trebui să ruleze)
Un job poate fi creat în mai multe moduri, utilizând o
combinație de parametri in-line. Putem crea un job cu
procedura CREATE_JOB prin:
1.Utilizarea informațiilor din linie "what" și programul
specificat ca parametri
2.Utilizând un program salvat și specificând programul în linie
3.Specificând ce trebuie făcut în linie-program și utilizând un
cod deja salvat

Notă: Crearea unei activități necesită privilegiul de sistem


CREATE JOB.
BEGIN
DBMS_SCHEDULER.CREATE_JOB(‘JOB_NAME’,
program_name => ‘PROG_NAME’,
schedule_name => ‘SCHED_NAME’,
enabled => TRUE);
END;
/

Toate instrucțiunile SQL parcurg diferite etape:


1.Analizeaza
2.Lega
3.Executa
4.Prelucreaza
Unele etape pot să nu fie relevante pentru toate instrucțiunile -
de exemplu, faza de preluare este aplicabilă interogărilor.
Notă: Pentru instrucțiunile SQL integrate (SELECT, DML,
COMMIT și ROLLBACK), fazele de parse și de legare se fac la
momentul compilării. Pentru instrucțiunile SQL dinamice, toate
fazele sunt executate la timpul de execuție.
SQL dinamic:
Este construit și stocat ca șir de caractere în cadrul aplicației
Este o instrucțiune SQL cu date de coloană diferite sau condiții
diferite cu sau fără locașuri (variabile de legare)
Permite scrierea și executarea declarațiilor de definire a datelor,
de control al datelor sau de control al sesiunilor din PL / SQL
Se execută cu instrucțiuni SQL Native Dynamic sau cu pachetul
DBMS_SQL

Oferă suport nativ pentru SQL dinamic direct în limba PL / SQL


Oferă posibilitatea de a executa instrucțiuni SQL a căror
structură este necunoscută până la timpul de execuție
Este susținută de următoarele instrucțiuni PL / SQL:
EXECUTĂ IMEDIAT
OPEN-FOR
FETCH
ÎNCHIDE
• Deleting rows from any table:
• CREATE FUNCTION del_rows(table_name
VARCHAR2)
• RETURN NUMBER IS
• BEGIN
• EXECUTE IMMEDIATE 'DELETE FROM
'||table_name;
• RETURN SQL%ROWCOUNT;
• END;
• BEGIN DBMS_OUTPUT.PUT_LINE(
• del_rows('EMPLOYEE_NAMES')|| ' rows deleted.');
• END;

• Inserting a row into a table with two columns:

CREATE PROCEDURE add_row(table_name


VARCHAR2,
id NUMBER, name VARCHAR2) IS
BEGIN
EXECUTE IMMEDIATE 'INSERT INTO '||table_name||
' VALUES (:1, :2)' USING id, name;
END;

Pachetul DBMS_SQL este folosit pentru a scrie SQL dinamic în


proceduri stocate și pentru a analiza instrucțiunile DDL. Printre
procedurile și funcțiile pachetului se numără:
OPEN_CURSOR
ANALIZA
BIND_VARIABLE
A EXECUTA
FETCH_ROWS
CLOSE_CURSOR
Compararea SQL Native Dynamic și a pachetului DBMS_SQL
SQL dinamic nativ:
Este mai ușor de folosit decât DBMS_SQL
Necesită un cod mai mic decât DBMS_SQL
Îmbunătățește performanța, deoarece interpretul PL / SQL oferă
suport nativ pentru acesta
Suportă toate tipurile acceptate de SQL static în PL / SQL,
inclusiv tipurile definite de utilizator
Poate prelua rândurile direct în înregistrările PL / SQL
Pachetul DBMS_METADATA oferă o facilitate centralizată
pentru extracția, manipularea și resubmissionul metadatelor
dicționarului

Metadata API
Procesarea implică următorii pași:
1. Preluați metadatele unui obiect ca XML.
2. Transformați XML într-o varietate de moduri (inclusiv
transformarea acestuia în SQL DDL).
3. Trimiteți XML pentru a crea din nou obiectul.
Subprograms in DBMS_METADATA
OPENSpecifică tipul de obiect care urmează să fie recuperat,
versiunea metadatelor sale și modelul de obiect. Valoarea
returnată este un mâner de context opac pentru setul de obiecte
SET_FILTERSpecifică restricții asupra obiectelor care vor fi
preluate, cum ar fi numele obiectului sau schema

SET_COUNT
Specifică numărul maxim de obiecte care trebuie preluate într-
un singur apel FETCH_xxx
GET_QUERY

Returnează textul interogărilor care vor fi utilizate de


FETCH_xxx
SET_PARSE_ITEM
Activează parsarea de ieșire și specifică un atribut obiect care
urmează să fie analizat și returnat

ADD_TRANSFORM
Specifică o transformare pe care FETCH_xxx o aplică
reprezentării XML a obiectelor preluate

SET_TRANSFORM_PARAM,SET_REMAP_PARAM
Specifică parametrii pentru foaia de stil XSLT identificată de
transform_handle

FETCH_XXX

Returnează metadatele pentru obiectele care îndeplinesc


criteriile stabilite de OPEN, SET_FILTER
CLOSE

Invalidează mânerul returnat de OPEN și curăță starea asociată

FETCH_xxx Subprograms
FETCH_XML

Această funcție returnează metadatele XML pentru un obiect ca


XMLType
FETCH_DDL.
Această funcție returnează DDL (fie pentru a crea sau sterge un
obiect) într-o tabelă imbricată predefinită.
FETCH_CLOB
Această funcție returnează obiectele transformate sau nu ca
CLOB.

FETCH_XML_CLOB
Această procedură returnează metadatele XML pentru obiecte ca
CLOB într-un parametru IN OUT NOCOPY pentru a evita copii
scumpe LOB.
Există peste 70 de filtre, care sunt organizate în categorii de
tipuri de obiecte, cum ar fi:
Obiectele denumite
table
Obiectele care depind de tabele
Index
Obiecte dependente
Obiectele acordate
Datele din tabel
Statistici privind statisticile
Constrângerile
Toate tipurile de obiecte
Exportarea bazei de dat
Browsing APIs sunt:
GET_XXXFuncțiile GET_XML și GET_DDL returnează
metadatele pentru un singur obiect numit.
GET_DEPENDENT_XXXAceastă funcție returnează
metadatele pentru un obiect dependent.
GET_GRANTED_XXXAceastă funcție returnează metadatele
pentru un obiect acordat.
Standardizarea constantelor și a excepțiilor
Constantele și excepțiile sunt de obicei implementate utilizând
un pachet bodiless (adică într-o specificație a pachetului).

Standardizarea ajută la:


Dezvoltați programe compatibile
Promovați un grad mai mare de reutilizare a codului
Ease de întreținere a codului
Implementați standardele companiei în întreaga aplicație
Începeți cu standardizarea:
Nume de excepție
Definitii constante
Standardizarea manipulării excepțiilor

Luați în considerare scrierea unui subprogram pentru tratarea


excepțională a situațiilor:
Afișați erori pe baza valorilor SQLCODE și SQLERRM pentru
excepții
Urmăriți cu ușurință erorile de timp de execuție utilizând
parametrii din cod pentru a identifica:
Procedura în care a apărut eroarea
Locația (numărul liniei) a erorii
RAISE_APPLICATION_ERROR utilizând capabilități de
urmărire a stivei, cu al treilea argument setat la TRUE

Pentru programele care folosesc variabile locale ale căror valori


nu trebuie să se modifice:
Conversia variabilelor în constante pentru a reduce întreținerea
și depanarea
Creați o specificație centrală a pachetului și plasați toate
constantele în el
Definite drepturi:
Utilizat înainte de Oracle8i
Programele se execută cu privilegiile utilizatorului creator.
Utilizatorul nu are nevoie de privilegii pe obiectele care stau la
baza accesarii procedurii. Utilizatorul are nevoie de privilegiu
numai pentru a executa o procedură.
Drepturile Invocatorului:
Prezentat în Oracle8i
Programele se execută cu privilegiile utilizatorului apelant.
Utilizatorul cere privilegii asupra obiectelor care stau la baza
accesării procedurii
Tranzacții autonome:
Sunt independente de tranzacția principală
Suspendați tranzacția de apel până la finalizarea acesteia
Nu sunt tranzacții imbricate
Nu vă întoarceți dacă tranzacția principală revine
Activați modificările pentru a deveni vizibile pentru alte
tranzacții în urma unei comiteri
Sunt demarcate (începute și terminate) de subprograme
individuale și nu blocate sau blocate anonim PL / SQL

Clauza RETURNING:
Îmbunătățește performanța prin returnarea valorilor coloanelor
cu instrucțiunile INSERT, UPDATE și DELETE
Elimină necesitatea unei instrucțiuni SELECT

"Binds whole" matrice de valori într-o singură operație, mai


degrabă decât folosind o buclă pentru a efectua o operație
FETCH, INSERT, UPDATE și DELETE
Cuvinte cheie pentru a sprijini legarea în bloc:
FORALL instruiește motorul PL / SQL să colecteze colecțiile
de date de intrare înainte de a le trimite la motorul SQL
BULK COLLECT instruiește motorul SQL să colecteze
colecțiile de ieșire în blocuri înainte de a le întoarce la motorul
PL / SQL
Sugestia NOCOPY:
Este o cerere către compilatorul PL / SQL pentru a trece
parametrii OUT și IN OUT prin referință și nu prin valoare
Îmbunătățește performanțele prin reducerea cheltuielilor
generale la trecerea parametrilor

Effects of the NOCOPY Hint


Dacă subprogramul se termină cu o excepție care nu este tratată:
Nu vă puteți baza pe valorile parametrilor reali transmiși unui
parametru NOCOPY
Orice modificări incomplete nu sunt "derulate înapoi"
Protocolul de apel la procedură la distanță (RPC) vă permite să
transmiteți parametrii numai după valoare

Sugestia NOCOPY nu are efect dacă:


Parametrul actual:
Este un element al unui tabel index-by
Este constrâns (de exemplu, pe scară sau NU NULL)
Și parametrul formal sunt înregistrări, unde una sau ambele
înregistrări au fost declarate utilizând% ROWTYPE sau%
TYPE, iar constrângerile pe câmpurile corespunzătoare din
înregistrări diferă
Necesită o conversie implicită de tip de date
Subprogramul este implicat într-un apel extern sau la o
procedură de la distanță

Standardizing Constants and Exceptions


Constantele și excepțiile sunt de obicei implementate utilizând
un pachet bodiless (adică într-o specificație a pachetului).
Standardizarea ajută la:
Dezvoltați programe compatibile
Promovați un grad mai mare de reutilizare a codului
Ease de întreținere a codului
Implementați standardele companiei în întreaga aplicație
Începeți cu standardizarea:
Nume de excepție
Definitii constante

Standardizing Exceptions
Creați un pachet standardizat de gestionare a erorilor, care
include toate excepțiile definite și programate pentru a fi
utilizate în aplicație

Standardizarea manipulării excepțiilor


Luați în considerare scrierea unui subprogram pentru tratarea
excepțională a situațiilor:
Afișați erori pe baza valorilor SQLCODE și SQLERRM pentru
excepții
Urmăriți cu ușurință erorile de timp de execuție utilizând
parametrii din cod pentru a identifica:
Procedura în care a apărut eroarea
Locația (numărul liniei) a erorii
RAISE_APPLICATION_ERROR utilizând capabilități de
urmărire a stivei, cu al treilea argument setat la TRUE
Standardizarea constantelor
Pentru programele care folosesc variabile locale ale căror valori
nu trebuie să se modifice:
Conversia variabilelor în constante pentru a reduce întreținerea
și depanarea
Creați o specificație centrală a pachetului și plasați toate
constantele în el
LOB-urile sunt folosite pentru a stoca date nestructurate mari,
cum ar fi text, imagini grafice, filme și forme de undă sonore
Gestionarea LOB-urilor interne
Pentru a interacționa pe deplin cu LOB, interfețele asemănătoare
fișierelor sunt furnizate în:
PL / SQL pachet DBMS_LOB
Oracle Call Interface (OCI)
Obiecte Oracle pentru legarea și încorporarea obiectului (OLE)
Pro * C / C ++ și Pro * COBOL precompilatoare
JDBC (Java Database Connectivity)
Serverul Oracle oferă suport pentru administrarea LOB prin
SQL.

Ce sunt BFILE?
Tipul de date BFILE acceptă un obiect extins sau bazat pe
fișiere ca: Atribute într-un tip de obiect Valorile coloanelor
dintr-un table

Linii directoare pentru crearea obiectelor DIRECTORY


Nu creați obiecte DIRECTORY pe căi cu fișiere de bază de
date.
Limitați numărul de persoane care primesc următoarele
privilegii de sistem:
CREEAZI ORICE DIRECTOR
DROPUL ORICE DIRECTOR
Toate obiectele DIRECTORY sunt proprietatea SYS.
Creați căi de directoare și setați corect permisiunile înainte de a
utiliza obiectul DIRECTORY astfel încât serverul Oracle să
poată citi fișierul.
Gestionarea BFILE
DBA sau administratorul de sistem:
1. Creează un director OS și furnizează fișiere
2. Creează un obiect DIRECTORY în baza de date
3. Acordă privilegiul READ pe obiectul DIRECTORY
utilizatorilor bazei de date corespunzătoare
Dezvoltatorul sau utilizatorul:
4. Creează un tabel Oracle cu o coloană definită ca tip de date
BFILE
5. Se inserează rânduri în tabel folosind funcția BFILENAME
pentru a popula coloana BFILE
6. Încarcă un subprogram PL / SQL care declară și inițializează
un localizator LOB și citește BFILE

Migrarea de la LONG la LOB


Oracle Database 10g permite migrarea coloanelor LONG în
coloane LOB.
Migrarea datelor constă în procedura de mutare a tabelelor
existente care conțin coloane LONG pentru a utiliza LOB-uri:
Migrarea aplicațiilor constă în modificarea aplicațiilor LONG
existente pentru utilizarea LOB-urilor.
Migrating from LONG to LOB

Conversia implicită: De la variabila LONG (LONG RAW) sau


variabila VARCHAR2 (RAW) la o variabilă CLOB (BLOB) și
invers Conversie explicită: TO_CLOB () convertește LONG,
VARCHAR2 și CHAR în CLOB. TO_BLOB () convertește
LONG RAW și RAW la BLOB. Transmiterea parametrilor de
funcționare și de procedură: CLOB-urile și BLOB-urile ca
parametri reali VARCHAR2, LONG, RAW și LONG RAW
sunt parametri formali și invers. Datele LOB sunt acceptate în
majoritatea operatorilor SQL și PL / SQL și în funcțiile
incorporate
DBMS_LOB Package
Lucrul cu LOB-urile necesită adesea utilizarea pachetului
DBMS_LOB furnizat de Oracle.
DBMS_LOB oferă rutine pentru a accesa și manipula LOB-urile
interne și externe.
Oracle Database 10g permite recuperarea datelor LOB direct
folosind SQL fără un LOB API special.
În PL / SQL, puteți defini un VARCHAR2 pentru un CLOB și
un RAW pentru un BLOB

Modificați valorile LOB: APPEND, COPY, ERASE, TRIM,


WRITE, LOADFROMFILE
Citiți sau examinați valorile LOB: GETLENGTH, INSTR,
READ, SUBSTR
Specific pentru BFILE: FILECLOSE, FILECLOSEALL,
FILEEXISTS, FILEGETNAME, FILEISOPEN, FILEOPEN

Parametrii NULL se întorc în NULL.


Offsets:
BLOB, BFILE: măsurat în octeți
CLOB, NCLOB: Măsurată în caractere
Nu există valori negative pentru parametri

LOB-uri temporare:
Furnizați o interfață pentru a sprijini crearea de LOB-uri care
acționează ca variabile locale
Pot fi BLOB-uri, CLOB-uri sau NCLOB-uri
Nu sunt asociate cu un tabel specific
Sunt create folosind procedura
DBMS_LOB.CREATETEMPORARY
Utilizați rutinele DBMS_LOB
Durata de viață a unui LOB temporar este o sesiune.
LOB-urile temporare sunt utile pentru transformarea datelor în
LOB-uri interne permanente.
Un trigger: Este un bloc PL / SQL sau o procedură PL / SQL
asociată cu o tabelă, vizualizare, schemă sau bază de date
Execută implicit ori de câte ori are loc un anumit eveniment
Poate fi una dintre următoarele: Aplicarea de declanșare: se
declanșează când apare un eveniment cu o anumită aplicație
Activarea bazei de date: se declanșează ori de câte ori un
eveniment de date (cum ar fi DML) sau un eveniment de sistem
(cum ar fi logarea sau oprirea) apare într-o schemă sau într-o
bază de date
Puteți crea declanșatori pentru:
Efectuați acțiuni conexe
Centralizați operațiunile globale
Nu trebuie să creați declanșatoare:
În cazul în care funcționalitatea este deja integrată în serverul
Oracle
Acest duplicat alte declanșatoare
Puteți crea proceduri memorate și le puteți invoca într-un
declanșator, dacă codul PL / SQL este foarte lung.
Utilizarea excesivă a declanșatorilor poate duce la
interdependențe complexe, care pot fi dificil de întreținut în
aplicații mari.

Types of DML Triggers


Tipul triggerului determină dacă corpul se execută pentru
fiecare rând sau doar o singură dată pentru instrucțiunea de
declanșare.
Declanșarea unei declarații:
Execută o dată pentru evenimentul de declanșare
Este tipul implicit de trigger
Incendii o dată, chiar dacă nu sunt afectate deloc rânduri
Un declanșator de rânduri:
Execută o singură dată pentru fiecare rând afectat de
evenimentul de declanșare
Nu este executat dacă evenimentul de declanșare nu afectează
niciun rând
Este indicat prin specificarea clauzei FOR EACH ROW
Trigger Timing
ÎNAINTE: Executați corpul de declanșare înainte de declanșarea
evenimentului DML pe o masă.
AFTER: Executați corpul de declanșare după evenimentul de
declanșare DML pe o masă.
INSTEAD OF: Executați corpul de declanșare în loc de
instrucțiunea de declanșare. Acesta este folosit pentru vizualizări
care nu pot fi modificate în alt mod.
Notă: Dacă sunt definite mai multe declanșatoare pentru același
obiect, atunci ordinea declanșatoarelor de declanșare este
arbitrară
Tipuri de trigger de eveniment si corp
Un triger eveniment:
Stabilește care instrucțiune DML determină declanșarea să se
execute
Tipurile sunt:
INTRODUCE
UPDATE [din coloana]
ȘTERGE
Un triger corp:
Stabilește ce acțiune este efectuată
Este un bloc PL / SQL sau un apel la o procedură
Triger eveniment creat de utilizator:
CREATE, ALTER sau DROP
Conectarea sau dezactivarea
Declanșarea unei baze de date sau a unui eveniment de sistem:
Oprirea sau pornirea bazei de date
Eroare specifică (sau orice eroare) ridicată
Benefits of Database Triggers
Securitate îmbunătățită a datelor:
Oferiți verificări de securitate îmbunătățite și complexe
Oferiți un audit îmbunătățit și complex
Imbunatatirea integritatii datelor:
Implicați constrângerile de integritate a datelor dinamice
Aplicarea constrângerilor de integritate referențială complexă
Asigurați-vă că operațiile aferente sunt realizate împreună
implicit

Gestionarea trigger
Următoarele privilegii de sistem sunt necesare pentru a gestiona
declanșatoarele:
CREATE / ALTER / DROP (ORICE) privilegiu TRIGGER: vă
permite să creați un declanșator în orice schemă
ADMINISTER DATABASE TRIGGER privilege: vă permite
să creați un declanșator pe baza de date
EXECUTE privilegiu (dacă declanșatorul dvs. se referă la orice
obiecte care nu se află în schema dvs.)
Notă: Declarațiile din corpul declanșator utilizează privilegiile
proprietarului declanșatorului, nu privilegiile utilizatorului care
execută operația care declanșează un trigger.
Puteți utiliza declanșatoarele pentru:
Securitate
Audit
Integritatea datelor
Integritatea referențială
Replicarea tablei
Computează automat datele derivate
Înregistrarea evenimentelor
Notă: Anexa C acoperă fiecare dintre aceste exemple în detaliu

Puteți vizualiza următoarele informații despre trigger:


USER_OBJECTS vizualizarea dicționarului de date: informații
despre obiect
USER_TRIGGERS vizualizarea dicționarului de date: textul
declanșatorului
Afișare dicționar de date USER_ERRORS: erori de sintaxă PL /
SQL (erori de compilare) ale declanșatorului
Caracteristicile și avantajele compilării native

Compilație nativă:
Utilizează un makefile generic care utilizează următorul
software de sistem de operare:
Compilatorul C
Linkerul
Utilitarul Make
Generă biblioteci partajate care sunt copiate în sistemul de
fișiere și încărcate la momentul executării
Oferă performanțe mai bune, cu până la 30% mai rapide decât
codul interpretat, pentru operații procedurale cu intensitate de
calcul

Luați în considerare următoarele: Instrumentele de depanare


pentru PL / SQL nu pot depana codul nativ compilat. Codul
nativ compilat este mai lent pentru a fi compilat decât codul
interpretat. Cantități mari de subprograme compilate nativ pot
afecta performanța datorită limitărilor impuse de sistemul de
operare atunci când se manipulează bibliotecile partajate.
Limitele directorului OS pot fi gestionate prin setarea
parametrilor de inițializare a bazei de date:
PLSQL_NATIVE_LIBRARY_SUBDIR_COUNT și
PLSQL_NATIVE_LIBRARY_DIR

Pentru a permite compilarea nativă, efectuați următorii pași: 1.


Editați fișierul makefile furnizat și introduceți căile și alte valori
corespunzătoare pentru sistemul dvs. 2. Setați parametrul
PLSQL_COMPILER_FLAGS (la nivel de sistem sau de
sesiune) la valoarea NATIVE. Implicit este INTERPRETAT. 3.
Compilați procedurile, funcțiile și pachetele. 4. Întrebați
dicționarul de date pentru a vedea că o procedură este compilată
pentru execuția nativă
Componenta de avertizare Infrastructure
Compilatorul PL / SQL din Oracle Database 10g a fost
îmbunătățit pentru a produce avertismente pentru subprograme.
Niveluri de avertizare:
Pot fi setate:
Declarativ cu parametrul de inițializare PLSQL_WARNINGS
Utilizând programabil pachetul DBMS_WARNINGS
Sunt aranjate în trei categorii: performanță severă, performanță
și informativă
Pot fi activate și dezactivate în funcție de categorie sau de un
anumit mesaj
Exemple de mesaje de avertizare:
SP2-0804: Procedura creată cu avertismente de compilare
PLW-07203: Parametrul "IO_TBL" poate beneficia de utilizarea
sugestiei de compilator NOCOPY.

Setarea PLSQL_WARNINGS:
Poate fi setat la DEFERRED la nivel de sistem
Este stocat cu fiecare subprogram compilat
Aceasta este actuală pentru sesiunea utilizată, în mod implicit,
atunci când se recompila cu:
O instrucțiune CREATE sau REPLACE
O declarație ALTER ... COMPILE
Acest lucru este stocat cu subprogramul compilat utilizat când se
specifică REUSE SETTINGS când se recompila cu o
instrucțiune ALTER ... COMPILE

Pachetul DBMS_WARNING oferă o modalitate de a manipula


programatic comportamentul setărilor de avertizare PL / SQL de
sistem sau de sesiune actuale. Utilizând subprogramele
DBMS_WARNING, puteți: Solicitați setările existente
Modificați setările pentru cerințe specifice sau restaurați setările
originale Ștergeți setările Exemplu: Salvarea și restaurarea
setărilor de avertizare pentru un mediu de dezvoltare care
solicită codul dvs. care compilează subprogramele PL / SQL și
suprimă avertismentele din cauza cerințelor afacerii
Using DBMS_WARNING Procedures

Toți parametrii sunt parametrii IN și au tipul de date


VARCHAR2. Cu toate acestea, parametrul w_number este un
tip de date NUMBER. Valorile șirului de parametru nu sunt
sensibile la minuscule. Valorile parametrilor w_value sunt
ENABLE, DISABLE, and ERROR. Valorile w_category sunt
ALL, INFORMATION, SEVERE și PERFORMANCE.
Valoarea scopului este fie SESSION, fie SYSTEM. Utilizarea
SYSTEM necesită privilegiul ALTER SYSTEM
Using DBMS_WARNING Functions
GET_CATEGORY returnează o valoare totală,
INFORMAȚIONALĂ, SEVERE sau PERFORMANȚĂ pentru
un număr de mesaj dat.
GET_WARNING_SETTING_CAT returnează ENABLE,
DISABLE sau ERROR ca valoare de avertizare curentă pentru
un nume de categorie, iar GET_WARNING_SETTING_NUM
returnează valoarea pentru un anumit număr de mesaj.
GET_WARNING_SETTING_STRING returnează întregul șir
de avertizare pentru sesiunea curentă.

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