SlideShare a Scribd company logo
Advanced PL/SQL 
Budácsik Attila 
! 
VANIO ORACLE Database12c: Advanced PL/SQL
PL/SQL szerepe 
- sok DB hívás 
- SQL-ek helye eloszott 
- hálózati forgalom terhelése 
- SQL-ek helye eloszott 
- hálózati forgalom terhelése még mindig 
nagy 
VANIO ORACLE Database12c: Advanced PL/SQL
PL/SQL előnyei 
• SQL integráció 
• Minden SQL típust ismer 
• Dinamikus SQL 
• Modularizálás 
• Teljesítmény 
• Hordozhatóság 
• OOP támogatás 
VANIO ORACLE Database12c: Advanced PL/SQL
Csomag tervezés 
• Tervezd és készítsd el a Spec részt a Body előtt 
(publikus típusok, kurzorok, eljárások.. privát 
elemek a Body-ba kerüljenek) 
• Használj privát eljárást vagy függvényt a logika 
elrejtéséhez 
• Limitáld a kódokat BEGIN .. END között - 
~60sor - több, kisebb, önálló eljárások - 
tesztelés, olvashatóság, újrafelhasználhatóság 
• Közös elemek kiszervezése, pl.: 
csomagváltozóba = ne legyen kódismétlés! 
• Hibakezelés megtervezése az üzleti logika 
pontos ismeretével 
VANIO ORACLE Database12c: Advanced PL/SQL
PL/SQL tervezés I. 
• Hibaérzékeny kódot tegyük külön blokkba 
• Kiértékelési sorrent - PL/SQL motor rövidre zárja 
• CASE használata IF (PL/SQL) vagy DECODE (SQL) helyett 
• SAVE EXCEPTION 
• Bulk limit, save PGA, de ne hard kódolva! 
• Emeljük ki az alkalmazásban használt konstansokat 
• Emeljük ki az alkalmazásban használt változókat: 
SUBTYPE 
• Collection bejárásához: FIRST, LAST és NEXT 
VANIO ORACLE Database12c: Advanced PL/SQL
PL/SQL tervezés II. 
• Soha ne ismételj SQL utasítást 
• Minden SQL utasítás beágyazása 
• Kód írásakor vegyük figyelembe, hogy az alap struktúra (adatbázis) 
változhat 
• Kurzor eredményét soha ne külön deklarált változóba fetch-eljük 
• Használjunk SELECT FOR UPDATE-et, a lockolt sorok 
minimalizásához 
• Újabb bekérdezést spórolhatunk meg a RETURNING záradékkal 
• NOCOPY 
VANIO ORACLE Database12c: Advanced PL/SQL
PL/SQL hangolás 
• FORALL 
• BULK COLLECT 
• Implicit konverzió elkerülése 
• Kontextus váltás elkerülése 
• Munka kurzorokkal 
• Hard pasring 
• SELECT beágyazása 
VANIO ORACLE Database12c: Advanced PL/SQL
FORALL 
• Tömeges SQL művelethez ne használjunk FOR-t! 
! 
! 
! 
! 
! 
! 
• Az első esetben 50000 context váltás történik. A művelet java részét ez teszi 
majd ki. A FOR futás 2.184ms, a FORALL futási ideje 828ms 
VANIO ORACLE Database12c: Advanced PL/SQL
BULK COLLECT 
• FORALL tömeges küldésre 
• BULK COLLECT tömeges fogadásra 
• Collection deklarálás szükséges 
• Növeli a lekérdezés teljesítményét 
• SELECT INTO 
• FETCH 
VANIO ORACLE Database12c: Advanced PL/SQL
Implicit konverzió elkerülése 
A PL/SQL minden esetben elvégzi az implicit konverziót 
az olyan típusok között, ahol ez lehetséges. Ennek 
elkerülése teljesítmény javulassal jár. Használd a következő 
függvényeket: 
! 
- TO_CHAR 
- TO_NUMBER 
- TO_DATE 
- CAST 
! 
Explicit konverzió mindig gyorsabb 
SUBTYPE-ok használata 
VANIO ORACLE Database12c: Advanced PL/SQL
Kontextus váltás elkerülése 
FORALL 
VANIO ORACLE Database12c: Advanced PL/SQL
Munka kurzorokkal 
• Két típusa van: implicit és explicit kurzor 
• Manuáliasan vagy automatikusan? (OPEN, FETCH, CLOSE vagy FOR) 
• kurzor_nev%ROWTYPE 
• Paraméterezhető (hard coding elkerülése) 
• REF CURSOR használata (dinamikus kurzor) 
VANIO ORACLE Database12c: Advanced PL/SQL
Hard parsing 
Minden SQL-t parsol az Oracle (szintaktika és szemantika), majd 
minden különböző SQL utasításhoz létrehoz egy implicit kurzort 
! 
Hard parsing 
Az adatbázisba először kerül be egy SQL utasítás, ami még nem 
található meg a shared pool-ban. Erőforrás igényesebb, mert újra 
be kell tölteni a memóriába 
! 
Soft parsing 
A query megtalálható a shared pool-ban, és újra használható a 
futási terv is (?!) 
! 
Bind változók használatával növelhető az implicit kurzor újra 
felhasználhatósága 
VANIO ORACLE Database12c: Advanced PL/SQL
SELECT beágyazása 
• Eredmény cache-elve van 
• Function Result Cache 
• Result Cache SQL hint 
• DETERMINISTIC 
• A select újra felhasználható 
• Oracle database: soft parsing 
• Fejlesztő: egyszer kell megírni, paraméterezhető a függvény 
VANIO ORACLE Database12c: Advanced PL/SQL
Collections 
• Associative array 
• PL/SQL only 
• Akármennyi eleme lehet (-2 +1 től +2 -1) 
TYPE type_name IS TABLE OF element_type INDEX BY index_type;! 
• Nested Table 
31 31 
• SQL and PL/SQL 
• Lehet tábla mező, felhasználható PL/SQL-ben, objektum attribútum ként.. 
• Varrays 
• SQL and PL/SQL 
• Fix elemű tömb. Hatékonyabb az előző két típusnál, mert előre le lesz foglalva a hely számára a 
memóriában 
VANIO ORACLE Database12c: Advanced PL/SQL
Collections 
• Inicializálás (konstruktorral, FETCH-el vagy direkt 
hozzárendeléssel) 
• Collection metódusok (FIRST, LAST, EXISTS, COUNT) 
• Lekérdezés SELECT-el, TABLE(v1) 
• Memoria felszabadítása: 
DBMS_SESSION.FREE_UNUSED_USER_MEMORY 
VANIO ORACLE Database12c: Advanced PL/SQL
Virtual Private Database 
• Sor szintű biztonság 
• Policy-k felállításával 
• Példa: biztosítók (IGFB) 
• Policies for SELECT, INSERT, UPDATE, and 
DELETE 
VANIO ORACLE Database12c: Advanced PL/SQL
Köszönöm! 
attila.budacsik@vanio.hu 
VANIO ORACLE Database12c: Advanced PL/SQL

More Related Content

Similar to Advanced PL/SQL (HUN)

Couchdb - WebKonf 2009
Couchdb - WebKonf 2009Couchdb - WebKonf 2009
Couchdb - WebKonf 2009
Balint Erdi
 
Szerver oldali fejlesztés korszerű módszerekkel C# nyelven
Szerver oldali fejlesztés korszerű módszerekkel C# nyelvenSzerver oldali fejlesztés korszerű módszerekkel C# nyelven
Szerver oldali fejlesztés korszerű módszerekkel C# nyelven
Krisztián Gyula Tóth
 
Magvas gondolatok
Magvas gondolatokMagvas gondolatok
Magvas gondolatok
Open Academy
 
Enterprise java evolució, avagy java ee (
Enterprise java evolució, avagy java ee (Enterprise java evolució, avagy java ee (
Enterprise java evolució, avagy java ee (Attila Balogh-Biró
 
Enterprise java evolució, avagy java ee (
Enterprise java evolució, avagy java ee (Enterprise java evolució, avagy java ee (
Enterprise java evolució, avagy java ee (Attila Balogh-Biró
 
Webműves Kelemen tanácsai, avagy mi kell a PHP falába?
Webműves Kelemen tanácsai, avagy mi kell a PHP falába?Webműves Kelemen tanácsai, avagy mi kell a PHP falába?
Webműves Kelemen tanácsai, avagy mi kell a PHP falába?
Open Academy
 
Webalkalmazások teljesítményoptimalizálása
Webalkalmazások teljesítményoptimalizálásaWebalkalmazások teljesítményoptimalizálása
Webalkalmazások teljesítményoptimalizálásaFerenc Kovács
 
Netfilter elméleti alapok
Netfilter elméleti alapokNetfilter elméleti alapok
Netfilter elméleti alapok
Benedek Rakovics
 
DB séma kezelés Liquibase-el
DB séma kezelés Liquibase-elDB séma kezelés Liquibase-el
DB séma kezelés Liquibase-el
Zoltán Németh
 
Drupal gyorstárazási stratégiák
Drupal gyorstárazási stratégiákDrupal gyorstárazási stratégiák
Drupal gyorstárazási stratégiákJános Fehér
 
Mi a baj a Drupaloddal
Mi a baj a DrupaloddalMi a baj a Drupaloddal
Mi a baj a Drupaloddal
thesnufkin
 
Pihi CouchDB-vel és RelaxDB-vel
Pihi CouchDB-vel és RelaxDB-velPihi CouchDB-vel és RelaxDB-vel
Pihi CouchDB-vel és RelaxDB-velBalint Erdi
 

Similar to Advanced PL/SQL (HUN) (12)

Couchdb - WebKonf 2009
Couchdb - WebKonf 2009Couchdb - WebKonf 2009
Couchdb - WebKonf 2009
 
Szerver oldali fejlesztés korszerű módszerekkel C# nyelven
Szerver oldali fejlesztés korszerű módszerekkel C# nyelvenSzerver oldali fejlesztés korszerű módszerekkel C# nyelven
Szerver oldali fejlesztés korszerű módszerekkel C# nyelven
 
Magvas gondolatok
Magvas gondolatokMagvas gondolatok
Magvas gondolatok
 
Enterprise java evolució, avagy java ee (
Enterprise java evolució, avagy java ee (Enterprise java evolució, avagy java ee (
Enterprise java evolució, avagy java ee (
 
Enterprise java evolució, avagy java ee (
Enterprise java evolució, avagy java ee (Enterprise java evolució, avagy java ee (
Enterprise java evolució, avagy java ee (
 
Webműves Kelemen tanácsai, avagy mi kell a PHP falába?
Webműves Kelemen tanácsai, avagy mi kell a PHP falába?Webműves Kelemen tanácsai, avagy mi kell a PHP falába?
Webműves Kelemen tanácsai, avagy mi kell a PHP falába?
 
Webalkalmazások teljesítményoptimalizálása
Webalkalmazások teljesítményoptimalizálásaWebalkalmazások teljesítményoptimalizálása
Webalkalmazások teljesítményoptimalizálása
 
Netfilter elméleti alapok
Netfilter elméleti alapokNetfilter elméleti alapok
Netfilter elméleti alapok
 
DB séma kezelés Liquibase-el
DB séma kezelés Liquibase-elDB séma kezelés Liquibase-el
DB séma kezelés Liquibase-el
 
Drupal gyorstárazási stratégiák
Drupal gyorstárazási stratégiákDrupal gyorstárazási stratégiák
Drupal gyorstárazási stratégiák
 
Mi a baj a Drupaloddal
Mi a baj a DrupaloddalMi a baj a Drupaloddal
Mi a baj a Drupaloddal
 
Pihi CouchDB-vel és RelaxDB-vel
Pihi CouchDB-vel és RelaxDB-velPihi CouchDB-vel és RelaxDB-vel
Pihi CouchDB-vel és RelaxDB-vel
 

Advanced PL/SQL (HUN)

  • 1. Advanced PL/SQL Budácsik Attila ! VANIO ORACLE Database12c: Advanced PL/SQL
  • 2. PL/SQL szerepe - sok DB hívás - SQL-ek helye eloszott - hálózati forgalom terhelése - SQL-ek helye eloszott - hálózati forgalom terhelése még mindig nagy VANIO ORACLE Database12c: Advanced PL/SQL
  • 3. PL/SQL előnyei • SQL integráció • Minden SQL típust ismer • Dinamikus SQL • Modularizálás • Teljesítmény • Hordozhatóság • OOP támogatás VANIO ORACLE Database12c: Advanced PL/SQL
  • 4. Csomag tervezés • Tervezd és készítsd el a Spec részt a Body előtt (publikus típusok, kurzorok, eljárások.. privát elemek a Body-ba kerüljenek) • Használj privát eljárást vagy függvényt a logika elrejtéséhez • Limitáld a kódokat BEGIN .. END között - ~60sor - több, kisebb, önálló eljárások - tesztelés, olvashatóság, újrafelhasználhatóság • Közös elemek kiszervezése, pl.: csomagváltozóba = ne legyen kódismétlés! • Hibakezelés megtervezése az üzleti logika pontos ismeretével VANIO ORACLE Database12c: Advanced PL/SQL
  • 5. PL/SQL tervezés I. • Hibaérzékeny kódot tegyük külön blokkba • Kiértékelési sorrent - PL/SQL motor rövidre zárja • CASE használata IF (PL/SQL) vagy DECODE (SQL) helyett • SAVE EXCEPTION • Bulk limit, save PGA, de ne hard kódolva! • Emeljük ki az alkalmazásban használt konstansokat • Emeljük ki az alkalmazásban használt változókat: SUBTYPE • Collection bejárásához: FIRST, LAST és NEXT VANIO ORACLE Database12c: Advanced PL/SQL
  • 6. PL/SQL tervezés II. • Soha ne ismételj SQL utasítást • Minden SQL utasítás beágyazása • Kód írásakor vegyük figyelembe, hogy az alap struktúra (adatbázis) változhat • Kurzor eredményét soha ne külön deklarált változóba fetch-eljük • Használjunk SELECT FOR UPDATE-et, a lockolt sorok minimalizásához • Újabb bekérdezést spórolhatunk meg a RETURNING záradékkal • NOCOPY VANIO ORACLE Database12c: Advanced PL/SQL
  • 7. PL/SQL hangolás • FORALL • BULK COLLECT • Implicit konverzió elkerülése • Kontextus váltás elkerülése • Munka kurzorokkal • Hard pasring • SELECT beágyazása VANIO ORACLE Database12c: Advanced PL/SQL
  • 8. FORALL • Tömeges SQL művelethez ne használjunk FOR-t! ! ! ! ! ! ! • Az első esetben 50000 context váltás történik. A művelet java részét ez teszi majd ki. A FOR futás 2.184ms, a FORALL futási ideje 828ms VANIO ORACLE Database12c: Advanced PL/SQL
  • 9. BULK COLLECT • FORALL tömeges küldésre • BULK COLLECT tömeges fogadásra • Collection deklarálás szükséges • Növeli a lekérdezés teljesítményét • SELECT INTO • FETCH VANIO ORACLE Database12c: Advanced PL/SQL
  • 10. Implicit konverzió elkerülése A PL/SQL minden esetben elvégzi az implicit konverziót az olyan típusok között, ahol ez lehetséges. Ennek elkerülése teljesítmény javulassal jár. Használd a következő függvényeket: ! - TO_CHAR - TO_NUMBER - TO_DATE - CAST ! Explicit konverzió mindig gyorsabb SUBTYPE-ok használata VANIO ORACLE Database12c: Advanced PL/SQL
  • 11. Kontextus váltás elkerülése FORALL VANIO ORACLE Database12c: Advanced PL/SQL
  • 12. Munka kurzorokkal • Két típusa van: implicit és explicit kurzor • Manuáliasan vagy automatikusan? (OPEN, FETCH, CLOSE vagy FOR) • kurzor_nev%ROWTYPE • Paraméterezhető (hard coding elkerülése) • REF CURSOR használata (dinamikus kurzor) VANIO ORACLE Database12c: Advanced PL/SQL
  • 13. Hard parsing Minden SQL-t parsol az Oracle (szintaktika és szemantika), majd minden különböző SQL utasításhoz létrehoz egy implicit kurzort ! Hard parsing Az adatbázisba először kerül be egy SQL utasítás, ami még nem található meg a shared pool-ban. Erőforrás igényesebb, mert újra be kell tölteni a memóriába ! Soft parsing A query megtalálható a shared pool-ban, és újra használható a futási terv is (?!) ! Bind változók használatával növelhető az implicit kurzor újra felhasználhatósága VANIO ORACLE Database12c: Advanced PL/SQL
  • 14. SELECT beágyazása • Eredmény cache-elve van • Function Result Cache • Result Cache SQL hint • DETERMINISTIC • A select újra felhasználható • Oracle database: soft parsing • Fejlesztő: egyszer kell megírni, paraméterezhető a függvény VANIO ORACLE Database12c: Advanced PL/SQL
  • 15. Collections • Associative array • PL/SQL only • Akármennyi eleme lehet (-2 +1 től +2 -1) TYPE type_name IS TABLE OF element_type INDEX BY index_type;! • Nested Table 31 31 • SQL and PL/SQL • Lehet tábla mező, felhasználható PL/SQL-ben, objektum attribútum ként.. • Varrays • SQL and PL/SQL • Fix elemű tömb. Hatékonyabb az előző két típusnál, mert előre le lesz foglalva a hely számára a memóriában VANIO ORACLE Database12c: Advanced PL/SQL
  • 16. Collections • Inicializálás (konstruktorral, FETCH-el vagy direkt hozzárendeléssel) • Collection metódusok (FIRST, LAST, EXISTS, COUNT) • Lekérdezés SELECT-el, TABLE(v1) • Memoria felszabadítása: DBMS_SESSION.FREE_UNUSED_USER_MEMORY VANIO ORACLE Database12c: Advanced PL/SQL
  • 17. Virtual Private Database • Sor szintű biztonság • Policy-k felállításával • Példa: biztosítók (IGFB) • Policies for SELECT, INSERT, UPDATE, and DELETE VANIO ORACLE Database12c: Advanced PL/SQL
  • 18. Köszönöm! attila.budacsik@vanio.hu VANIO ORACLE Database12c: Advanced PL/SQL