際際滷

際際滷Share 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 elnyei 
 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 eltt 
(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 elsz旦r ker端l be egy SQL utas鱈t叩s, ami m辿g nem 
tal叩lhat坦 meg a shared pool-ban. Erforr叩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 tl +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 elz k辿t t鱈pusn叩l, mert elre 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) (12)

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叩sa
Ferenc 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叩k
J叩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-vel
Balint Erdi
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叩sa
Ferenc 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叩k
J叩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-vel
Balint Erdi

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 elnyei 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 eltt (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 elsz旦r ker端l be egy SQL utas鱈t叩s, ami m辿g nem tal叩lhat坦 meg a shared pool-ban. Erforr叩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 tl +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 elz k辿t t鱈pusn叩l, mert elre 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