kende maria oracle peldatar

618
KENDE MÁRIA – NAGY ISTVÁN Oracle Példatár (SQL-PL/SQL) PANEM

Upload: szirkkrisz

Post on 25-Nov-2015

306 views

Category:

Documents


45 download

DESCRIPTION

Kende Maria Oracle Peldatar

TRANSCRIPT

  • KENDE MRIA NAGY ISTVN

    Oracle Pldatr (SQL-PL/SQL)

    PANEM

  • 2 Oracle-pldatr

    Copyright 2005 Panem Knyvkiad ISBN 963 545 436 8 Lektor: Juhsz Istvn Mszaki szerkeszt: Papp Gyula Trdelte: Pipasz Bt. Bortterv: delkraut Rbert A kiadsrt felel a Panem Knyvkiad Kft. gyvezetje, 2005 [email protected] www.panem.hu A knyv a kiad s a szerzk gondos munkjnak eredmnye. Ennek ellenre elfordulhatnak benne hibk, melyeknek kvetkezmnyeirt sem a szerzk, sem a kiad nem vllalnak felelssget. Minden jog fenntartva. Jelen knyvet, illetve annak rszeit tilos reproduklni, adatrgzt rendszerben trolni, brmilyen formban vagy eszkzzel elektronikus ton, vagy ms mdon kzlni a kiad engedlye nlkl.

  • Oracle-pldatr 3

    (2014.01.16.)

    Tartalom Elsz

    I. rsz. FELADATGYJTEMNY

    1. fejezet. Egyszer lekrdezsek 2. fejezet. Egytbls csoportost lekrdezsek 3. fejezet. Tbbtbls lekrdezsek, allekrdezsek 4. fejezet. Interaktv krnyezet 5. fejezet. Adattblk ltrehozsa, mdostsa, tranzakcik, megszortsok 6. fejezet. Nzettblk, fels-N analzis, ROWNUM 7. fejezet. SQL sszefoglal feladatsorok 8. fejezet. PL/SQL vltozhasznlat, vezrlsi szerkezetek 9. fejezet. Hivatkozsi s sszetett adattpusok, kurzor, ROWID 10. fejezet. Kivtelkezels, alprogramok, triggerek 11. fejezet. Adatbzis-adminisztrtori ismeretek 12. fejezet. Kapcsolat a klvilggal 13. fejezet. Rszletez csoportostsok s analitikus fggvnyek az SQL-ben 14. fejezet. A DEMO vllalat (zleti alkalmazsok)

    II. rsz. MEGOLDSGYJTEMNY

    1. fejezet. Egyszer lekrdezsek 2. fejezet. Egytbls csoportost lekrdezsek 3. fejezet. Tbbtbls lekrdezsek, allekrdezsek 4. fejezet. Interaktv krnyezet 5. fejezet. Adattblk ltrehozsa, mdostsa, tranzakcik, megszortsok 6. fejezet. Nzettblk, fels-N analzis, ROWNUM 7. fejezet. SQL sszefoglal feladatsorok 8. fejezet. PL/SQL vltozhasznlat, vezrlsi szerkezetek 9. fejezet. Hivatkozsi s sszetett adattpusok, kurzor, ROWID 10. fejezet. Kivtelkezels, alprogramok, triggerek

  • 4 Oracle-pldatr

    11. fejezet. Adatbzis-adminisztrtori ismeretek 12. fejezet. Kapcsolat a klvilggal 13. fejezet. Rszletez csoportostsok s analitikus fggvnyek az SQL-ben 14. fejezet. A DEMO vllalat (zleti alkalmazsok)

    MELLKLET

    1. mellklet. A Personal Oracle teleptse 2. mellklet. Az Oracle alaptbli 3. mellklet. Bevezets az SQL*Plus krnyezet, s az SQL nyelv hasznlatba 4. mellklet. Elveszett fggsgek megvalstsa triggerrel 5. mellklet. Gyakran hasznlatos adatsztr-nzetek

    A CD-mellkletrl Irodalomjegyzk Trgymutat

  • Oracle-pldatr 5

    (2014.01.16.)

    Tartalomjegyzk KENDE MRIA NAGY ISTVN ......................................................................1

    Oracle Pldatr (SQL-PL/SQL)...................................................................................1 PANEM...............................................................................................................1

    Tartalom ..................................................................................................................3 Tartalomjegyzk ......................................................................................................5

    Elsz ........................................................................................................................14 I. rsz .................................................................................................................................16

    FELADATGYJTEMNY ......................................................................................16 Bevezets...........................................................................................................16 Nhny megjegyzs az elmleti sszefoglalkhoz ............................................17 Az utastsok szintaktikus jellse ....................................................................17

    1. fejezet ........................................................................................................................18 Egyszer lekrdezsek...............................................................................................18

    Elmleti sszefoglal.............................................................................................18 A SELECT utasts............................................................................................18

    SzelekcisLista ..............................................................................................18 TblaLista ......................................................................................................19 LogikaiOszlopkifejezs .................................................................................19 CsoportostOszlopkifejezs-lista .................................................................19 RendezOszlopkifejezs-lista........................................................................20 Megjegyzsek a SELECT utastshoz ...........................................................20

    Specilis fggvnyek.........................................................................................22 NVL fggvny................................................................................................22 DECODE fggvny.........................................................................................22 CASE kifejezs ..............................................................................................23

    Karakterkezel fggvnyek...............................................................................25 Dtumok s szmok formzott megjelentse....................................................32

    Rendszer dtum-id formtum belltsa ......................................................33 Dtum s id megjelentse s hasznlata .....................................................33 Szmok megjelentse ...................................................................................39

    Feladatok ...............................................................................................................41 2. fejezet ........................................................................................................................44

    Egytbls csoportost lekrdezsek .........................................................................44 Elmleti sszefoglal.............................................................................................44

    Csoportkpzs....................................................................................................44 Csoportfggvnyek............................................................................................45

    Feladatok ...............................................................................................................48 3. fejezet ........................................................................................................................51

    Tbbtbls lekrdezsek, allekrdezsek ..................................................................51 Elmleti sszefoglal.............................................................................................51

    Tblk sszekapcsolsa .....................................................................................51 Tbla sszekapcsols a FROM s WHERE utastsrszben .............................51 Tbla sszekapcsols a FROM utastsrszben a JOIN segtsgvel .............52 Hierarchikus adatszerkezet megjelentse .....................................................56

  • 6 Oracle-pldatr

    Korrellt lekrdezs...................................................................................56 Hierarchia lekrdezs (CONNECT BY) ......................................................57

    Allekrdezsek ..................................................................................................59 Allekrdezsek a FROM utastsrszben ........................................................59 Allekrdezsek a WHERE utastsrszben......................................................60 Allekrdezsek a szelekcis listban .............................................................60

    Feladatok ...............................................................................................................62 sszetett feladatok.................................................................................................64

    4. fejezet ........................................................................................................................66 Interaktv krnyezet...................................................................................................66

    Elmleti sszefoglal.............................................................................................66 Felhasznli (helyettest) vltozk hasznlata.................................................66

    A felhasznli vltozk hivatkozsi jelei (& s &&) ......................................66 DEFINE utasts............................................................................................67 ACCEPT utasts............................................................................................67 PROMPT utasts............................................................................................68 UNDEFINE utasts .......................................................................................68

    SQL*Plus krnyezet belltsa ..........................................................................69 Krnyezet lekrdezse...................................................................................69 Krnyezet belltsa ......................................................................................69 Az SQL*Plus utastsok lekrdezse (HELP) ...............................................69 Az SQL*Plus formzsi utastsok................................................................72

    Lista szint formzsok .............................................................................72 Oszlop szint formzsok..........................................................................72 Formzsok trlse ....................................................................................73

    Szkript programok felhasznl-vezrelt hvsa .................................................78 Feladatok ...............................................................................................................80

    5. fejezet ........................................................................................................................82 Adattblk ltrehozsa, mdostsa, tranzakcik, megszortsok .............................82

    Elmleti sszefoglal.............................................................................................82 DML utastsok .................................................................................................82

    Beszrs.........................................................................................................82 Mdosts ......................................................................................................83 Trls.............................................................................................................83

    Adatbzis tranzakcik........................................................................................83 DDL utastsok..................................................................................................84

    Tbla ltrehozsa (kzvetlen ltrehozs) .......................................................84 Tbla ltrehozsa allekrdezssel (szrmaztatott ltrehozs) ........................85 Tbla mdostsa ...........................................................................................85

    j oszlop hozzadsa.................................................................................85 Oszlop mdostsa.....................................................................................85 Oszlop trlse (eldobsa)...........................................................................85 Oszlop tnevezse......................................................................................85 Tbla trlse (eldobsa).............................................................................86 Tbla tnevezse........................................................................................86

    Integritsi megszortsok...............................................................................86 Megszortsok defincija..........................................................................86

  • Oracle-pldatr 7

    (2014.01.16.)

    Megszorts hozzadsa.............................................................................88 Megszorts trlse ....................................................................................88 Megszortsok lekrdezse ........................................................................88 Megszorts felfggesztse (letiltsa) ........................................................89 Megszorts engedlyezse........................................................................89

    Feladatok ...............................................................................................................97 6. fejezet ......................................................................................................................101

    Nzettblk, fels-N analzis, ROWNUM...................................................................101 Elmleti sszefoglal...........................................................................................101

    Nzettbla ltrehozsa s trlse .....................................................................101 Inline nzet ......................................................................................................103 Fels-N analzis ...............................................................................................103

    Feladatok .............................................................................................................106 7. fejezet ......................................................................................................................110

    sszetett SQL-feladatsorok.....................................................................................110 Elmleti sszefoglal...........................................................................................110

    Minta feladatsor...............................................................................................110 Minta feladatsor s megoldsa.........................................................................111

    Feladatok .............................................................................................................123 A. feladatsor ....................................................................................................123 B. feladatsor.....................................................................................................123 C. feladatsor.....................................................................................................124 D. feladatsor ....................................................................................................124 E. feladatsor.....................................................................................................125 F. feladatsor .....................................................................................................125 G. feladatsor ....................................................................................................126 H. feladatsor ....................................................................................................126 I. feladatsor ......................................................................................................127 J. feladatsor......................................................................................................127

    8. fejezet ......................................................................................................................129 PL/SQL vltozhasznlat, vezrlsi szerkezetek.....................................................129

    Elmleti sszefoglal...........................................................................................129 PL/SQL blokk..................................................................................................129

    Deklarcis szegmens..................................................................................130 Vgrehajthat szegmens ..............................................................................130 Kivtelkezel szegmens ..............................................................................130 A blokkok szerkezete...................................................................................130

    Vltozk hasznlata.........................................................................................131 I. SQL*Plus felhasznli vltozk...........................................................131 II. SQL*Plus krnyezeti vltozk............................................................131 III. PL/SQL vltozk ...............................................................................132 A vltozhasznlat szemlltetse.............................................................132

    Vezrlsi szerkezetek, utastsok.....................................................................135 A SELECT utasts a PL/SQL-ben..............................................................135 Feltteles utasts.........................................................................................135 Ciklusutastsok...........................................................................................136

    A LOOP-ciklus........................................................................................136

  • 8 Oracle-pldatr

    A FOR-ciklus ..........................................................................................136 A WHILE-ciklus .....................................................................................137

    Adatok kirsa kpernyre...........................................................................137 Vletlen szmok generlsa.........................................................................140

    Feladatok .............................................................................................................143 9. fejezet ......................................................................................................................144

    Hivatkozsi s sszetett adattpusok, kurzor, ROWID .............................................144 Elmleti sszefoglal...........................................................................................144

    Hivatkozsi adattpus.......................................................................................144 Rekord adattpus..............................................................................................145 Gyjttbla tpus .............................................................................................145 Kurzorok..........................................................................................................146 Explicit kurzor .................................................................................................146 Kurzorhasznlat FOR-ciklusban (rejtett kurzorok) .........................................147 Kurzorattribtumok .........................................................................................148 ROWID .............................................................................................................149 FOR UPDATE zradk....................................................................................149

    Feladatok .............................................................................................................153 sszetett (prostsi) feladatok............................................................................156

    10. fejezet ....................................................................................................................162 Kivtelkezels, alprogramok, triggerek...................................................................162

    Elmleti sszefoglal...........................................................................................162 Kivtelkezels (EXCEPTION) ........................................................................162

    A kivtelek fajti .........................................................................................162 A felhasznl ltal definilt kivtelek .....................................................162 PL/SQL elre definilt automatikus rendszerkivtel ...............................163

    Alprogramok....................................................................................................163 Paramterek adattpusai ...............................................................................164

    Trolt alprogramok..........................................................................................167 Trolt alprogramok ltrehozsa ...................................................................167 Trolt alprogramok trlse ..........................................................................167 Trolt alprogramok hibakezelse.................................................................167 Trolt alprogramok lekrdezse ..................................................................168 Trolt eljrs futtatsa .................................................................................169

    Triggerek .........................................................................................................170 Triggerindt esemnyek .............................................................................171 A triggerek alkalmazsa ..............................................................................171 A triggerek felptse s lekrdezse...........................................................171 A trolt alprogramok s triggerek lekrdezse ............................................172 A triggerek jellemzi ...................................................................................172 A triggerek szintaktikus alakja ....................................................................172 Triggerek mkdsnek jellegzetessgei.....................................................173 A korrelcis nevek hasznlata ...................................................................174 Trigger trlse .............................................................................................174 Azonos esemnyre tzel triggerek.............................................................174 Triggerek letiltsa s engedlyezse............................................................174 A triggerel esemny meghatrozsa ..........................................................175

  • Oracle-pldatr 9

    (2014.01.16.)

    Feladatok .............................................................................................................185 11. fejezet ....................................................................................................................187

    Adatbzis-adminisztrtori ismeretek .......................................................................187 Elmleti sszefoglal...........................................................................................187

    Jogosultsg (jog, privilgium) .........................................................................187 Rendszerjogosultsgok ................................................................................188

    Rendszerjogosultsgok adsa (GRANT)...................................................188 Rendszerjogosultsgok visszavonsa (REVOKE).....................................189

    Objektumkezelsi jogosultsgok .................................................................189 Objektumkezelsi jogosultsg adsa (GRANT) ........................................189 Objektumkezelsi jogosultsg visszavonsa (REVOKE)..........................190

    Jogosultsgok lekrdezse ...........................................................................190 Tblaterlet......................................................................................................191

    Tblaterlet ltrehozsa...............................................................................191 Tblaterletek lekrdezse...........................................................................191 Tbla ltrehozsa adott tblaterleten..........................................................191 Tblaterlet mdostsa ...............................................................................192 Tblaterlet trlse ......................................................................................192

    Felhasznl (USER).........................................................................................192 Felhasznl ltrehozsa ...............................................................................193 Felhasznl trlse ......................................................................................194 Felhasznl kapcsoldsa az adatbzishoz..................................................194

    Szerepkr (ROLE)............................................................................................194 Szerepkr ltrehozsa ..................................................................................194 Szerepkr trlse .........................................................................................194

    Pldk ..................................................................................................................195 Feladatok .............................................................................................................212

    12. fejezet ....................................................................................................................213 Kapcsolat a klvilggal ...........................................................................................213

    Elmleti sszefoglal...........................................................................................213 Programkapcsolat kls programok futtatsa...............................................213

    Kapcsolat az opercis rendszerrel..............................................................213 A DOS krnyezet behvsa SQL*Plus krnyezetbl...............................214 DOS parancs kiadsa SQL*Plus krnyezetben .......................................215 DOS parancs-kteg (batch program) futtatsa.........................................215 Kls szvegszerkeszt hasznlata .........................................................217

    Trolt eljrsok hvsa az SQL*Plus krnyezetben.....................................217 Adatkapcsolat ments, betlts.....................................................................217

    Teljes adatbzisterlet s egyes tblaterletek archivlsa fjlba................218 Tblk exportlsa, importlsa Oracle eszkzkkel ..................................220 Tbla tartalmnak exportlsa fjlba ...........................................................221

    A SPOOL utasts ....................................................................................221 Vglapra msols...................................................................................223

    Tbla tartalmnak betltse Word-be ..........................................................224 Tbla tartalmnak betltse Excel-be ..........................................................225

    13. fejezet ....................................................................................................................229 Rszletez csoportostsok s analitikus fggvnyek az SQL-ben .........................229

  • 10 Oracle-pldatr

    Elmleti sszefoglal...........................................................................................229 Az SQL j csoportkpzsi eszkzei ................................................................229

    A ROLLUP opertor ...................................................................................229 CUBE opertor .............................................................................................233 GROUPING fggvny..................................................................................235 GROUPING_ID fggvny...........................................................................237 GROUPING SETS fggvny .......................................................................239

    Az SQL analitikus fggvnyei.........................................................................240 Az analitikus fggvnyek ltalnos felptse.............................................240

    Az analitikus zradk...............................................................................241 Rang fggvnyek.........................................................................................243

    Az analitikus rang fggvnyek ................................................................243 Az aggregl rang fggvnyek................................................................244

    Statisztikai fggvnyek................................................................................253 RATIO_TO_REPORT fggvny .............................................................256 Specilis szlsrtk fggvnyek ............................................................257

    Hisztogram fggvnyek...............................................................................261 WIDTH_BUCKET fggvny ....................................................................261 NTILE fggvny .....................................................................................262

    14. fejezet ....................................................................................................................265 A DEMO vllalat (zleti alkalmazsok)..................................................................265

    A DEMO vllalat felptse ............................................................................265 Feladatok .............................................................................................................267

    II. rsz..............................................................................................................................269 MEGOLDSGYJTEMNY ................................................................................269

    Bevezets.........................................................................................................269 1. fejezet ......................................................................................................................270

    Egyszer lekrdezsek.............................................................................................270 Feladatok s megoldsok.....................................................................................270

    2. fejezet ......................................................................................................................284 Egytbls csoportost lekrdezsek .......................................................................284

    Feladatok s megoldsok.....................................................................................284 3. fejezet ......................................................................................................................296

    Tbbtbls lekrdezsek, allekrdezsek ................................................................296 Feladatok s megoldsok.....................................................................................296 sszetett feladatok s megoldsok ......................................................................310

    4. fejezet ......................................................................................................................325 Interaktv krnyezet.................................................................................................325

    Feladatok s megoldsok.....................................................................................325 5. fejezet ......................................................................................................................343

    Adattblk ltrehozsa, mdostsa, tranzakcik, megszortsok ...........................343 Feladatok s megoldsok.....................................................................................343

    6. fejezet ......................................................................................................................380 Nzettblk, fels-N analzis, ROWNUM...................................................................380

    Feladatok s megoldsok.....................................................................................380 7. fejezet ......................................................................................................................417

    sszetett SQL-feladatsorok.....................................................................................417

  • Oracle-pldatr 11

    (2014.01.16.)

    Feladatok s megoldsok.....................................................................................417 A. feladatsor (megoldsok)..............................................................................417 B. feladatsor (megoldsok)..............................................................................429 C. feladatsor (megoldsok)..............................................................................435 D. feladatsor (megoldsok)..............................................................................440 H. feladatsor (megoldsok)..............................................................................448 I. feladatsor (megoldsok) ...............................................................................454 J. feladatsor (megoldsok)...............................................................................458

    8. fejezet ......................................................................................................................461 PL/SQL vltozhasznlat, vezrlsi szerkezetek.....................................................461

    Feladatok s megoldsok.....................................................................................461 9. fejezet ......................................................................................................................468

    Hivatkozsi s sszetett adattpusok, kurzor, ROWID .............................................468 Feladatok s megoldsok.....................................................................................468 sszetett (prostsi) feladatok s megoldsok ...................................................495

    10. fejezet ....................................................................................................................514 Kivtelkezels, alprogramok, triggerek...................................................................514

    Feladatok s megoldsok.....................................................................................514 11. fejezet ....................................................................................................................536

    Adatbzis-adminisztrtori ismeretek .......................................................................536 Feladatok s megoldsok.....................................................................................536

    12. fejezet ....................................................................................................................544 Kapcsolat a klvilggal ...........................................................................................544

    13. fejezet ....................................................................................................................545 Rszletez csoportostsok s analitikus fggvnyek az SQL-ben .........................545

    14. fejezet ....................................................................................................................546 A DEMO vllalat (zleti alkalmazsok)..................................................................546

    Feladatok s megoldsok.....................................................................................546 MELLKLET .................................................................................................................572

    1. Mellklet..................................................................................................................573 A Personal Oracle teleptse....................................................................................573

    2. Mellklet..................................................................................................................574 Az Oracle alaptbli ................................................................................................574

    Az alaptblk s rtelmezsk.............................................................................574 Az emp tbla tartalma .....................................................................................574 Az emp tbla rtelmezse................................................................................574 Az emp tbla szerkezete..................................................................................575 A dept tbla tartalma.....................................................................................575 A dept tbla rtelmezse ...............................................................................576 A dept tbla szerkezete .................................................................................576 A salgrade tbla tartalma ...........................................................................576 A salgrade tbla rtelmezse......................................................................576 A salgrade tbla szerkezete........................................................................577

    3. Mellklet..................................................................................................................578 Bevezets az SQL*Plus krnyezet, s az SQL nyelv hasznlatba .........................578

    Belps az SQL*Plus krnyezetbe ......................................................................578 Felhasznli tblk lekrdezse...........................................................................580

  • 12 Oracle-pldatr

    Felhasznli katalgus s adatsztr ...............................................................580 Felhasznli adattbla lekrdezse ..................................................................581

    Felhasznl vlts........................................................................................581 Szkript programok rsa, futtatsa .......................................................................581

    Szvegszerkeszts az SQL*Plus krnyezetben ...............................................582 A login szkript ltrehozsa.......................................................................582 A login szkript futtatsa ...........................................................................582 ltalnos szkript program ltrehozsa s futtatsa ......................................583 Kirats szkript programbl .........................................................................583 Megjegyzsek hasznlata.............................................................................583

    A REM tpus megjegyzs........................................................................583 A -- tpus megjegyzs ..........................................................................583 A /* */ tpus megjegyzs........................................................................584

    A sorfolytat jel hasznlata .........................................................................584 Vltozk hasznlata.....................................................................................584 Az SQL*Plus editornak lecserlse ...........................................................585

    Tbla-ltrehozs-feltlts-trls, dtumformk...................................................585 4. Mellklet..................................................................................................................588

    Elveszett fggsgek megvalstsa triggerrel........................................................588 I. A problma felvetse (elmleti httr) .............................................................588 II. A problma megoldsa triggerrel....................................................................591

    5. Mellklet..................................................................................................................598 Gyakran hasznlatos adatsztr-nzetek .................................................................598

    Tblaszerkezet lekrdezse..........................................................................598 Csatlakozs az adatbzishoz klnbz felhasznlknt ............................599

    Objektumok tulajdonsgainak lekrdezse......................................................599 Az adatsztr s ltalnos nzeteinek lekrdezse ......................................599 A felhasznli objektumok hasznos (szktett) lekrdezsei.......................599 Megszortsok lekrdezse ..........................................................................600 PL/SQL objektumok lekrdezse ................................................................600

    A felhasznlk s krnyezetk lekrdezse.....................................................601 Az sszes felhasznl lekrdezse...............................................................601 Felhasznlk rendszeradatainak lekrdezse...............................................601 Felhasznl sajt rendszeradataik lekrdezse ............................................601 Felhasznlk s tblaterleteik lekrdezse.................................................601 Felhasznl sajt tblinak s tblaterleteinek lekrdezse .......................602 A tblaterletek s azok llapotnak lekrdezse........................................602 A tblaterletek trolsi helynek lekrdezse ............................................602 A felhasznl szmra elrhet tblaterletek listja ..................................602 Felhasznli tblk s azok tblaterleteinek lekrdezse ..........................602

    A felhasznlk s jogosultsgaik lekrdezse .................................................602 A Sys rendszeradminisztrtor jogosultsgainak lekrdezse.......................603 A System felhasznl jogosultsgainak lekrdezse ...................................603 Felhasznl rendszerjogosultsgainak lekrdezse .....................................603 Felhasznl objektumkezelsi jogosultsgainak lekrdezse ......................603

    A CD-mellkletrl ...............................................................................................604 Irodalomjegyzk ......................................................................................................605

  • Oracle-pldatr 13

    (2014.01.16.)

    TRGYMUTAT ..........................................................................................608

  • 14 Oracle-pldatr

    Elsz

    E pldatr segtsget kvn nyjtani az egyetemek s fiskolk informatikus hallgati szmra az Adatbzis-kezels cm trgy gyakorlati anyagnak nll elsajttshoz, m az alapokon tlnyl professzionlis eszkzk bemutatsa rvn a szakirny kpzsek, s a specilis Oracle (SQL, PL/SQL) tanfolyamok rsztvevi is haszonnal forgathatjk.

    A pldatr els ht fejezete az Oracle SQL*Plus krnyezetben bemutatja az SQL nyelv (DQL, DML s DDL eszkzeinek) hasznlatt az alapvet ismeretektl s mdszerektl, a tbbtbls s csoportost lekrdezseken, a tblk ltrehozsn s mdostsn keresztl, a nzetek segtsgvel trtn sszetettebb feladatok megoldsig.

    A kvetkez hrom fejezet az Oracle magasszint, professzionlis alkalmazsok ltrehozsra szolgl programozsi nyelvt, a PL/SQL-t mutatja be a nyelvi alapoktl az sszetett s hivatkozsi tpusok hasznlatn keresztl a kurzorok, trolt eljrsok s triggerek tmakrig. Jelentsgt az adja, hogy a hagyomnyosan deklaratv (s emiatt rendkvl tmr) SQL nyelvet a legjabb szabvnybvtsek ppen a PL/SQL eszkzk beptsvel viszik procedurlis irnyba, vagyis gy tnik, hogy a nem is tvoli jv a teljes alkalmazs-fejlesztsre kpes SQL nyelv.

    A 11. fejezet az SQL jogosultsg-kezelssel kapcsolatos (DCL eszkzeinek) hasznlatt mutatja be, ezzel az adatbzis-adminisztrtori ismeretek terletre kalauzolva az Olvast. A 12. fejezet foglalkozik a gyakorlati szakemberek szmra igen fontos adatments, adatvisz-szatlts, archivls, valamint sajt alkalmazsok Oracle rendszerben val futtatsnak tmakrvel.

    Az utols kt fejezet az Oracle legjabb, a hierarchikus struktrkkal kapcsolatos elemzsek (pldul vllalatok pnzgyi, gazdasgi szmtsainak) elvgzsre szolgl eszkzeibl (rszletez csoportostsok, analitikus fggvnyek), s ezeknek egy fiktv vllalatra vonatkoz alkalmazsbl nyjt zeltt.

    A pldatr els tizenegy fejezete egy (akr felsoktatsbeli, akr tanfolyami) kpzs tematikus menetrendjnek, kiegszt tanknyvnek is tekinthet. (Heti egy gyakorlati foglalkozssal, s egy, vagy kt felmr zrthelyi dolgozattal szmolva ez pont egy szemesztert jelent.)

    A gyakorlati kpzs az Oracle adatbzis-kezel rendszer SQL*Plus krnyezetnek hasznlatn alapszik, ezrt felttelezzk, hogy az olvas szmra elrhet szmtgpen az mr teleptve van. (A felsoktats oktatinak s hallgatinak az otthoni gpre val teleptst az Oracle Magyarorszg az Academic Licence ltal biztostja.)

    A pldatr a Feladatgyjtemnybl, a Megoldsgyjtemnybl, szmos mellkletbl, irodalomjegyzkbl, az egyes pldkra mutat rszletes cmszjegyzkbl (trgymutatbl), s a pldk megoldsait futtathat formban tartalmaz CD-mellkletbl ll.

    A Feladatgyjtemny minden fejezete egy rvid elmleti sszefoglalt is tartalmaz az adott tmaterlethez. A Megoldsgyjtemnyben az egyes feladatokhoz gyakran tbb

  • Oracle-pldatr 15

    (2014.01.16.)

    megoldst is adunk, elemezve az egyes vltozatok elnyeit, htrnyait, st az oktatsi tapasztalatok alapjn esetenknt egy-egy tipikus hibs megoldst is bemutatunk, megadva a hiba helyt s okt.

    A kzlt pldk s feladatok mindegyike az Oracle rendszer hagyomnyos alaptblit hasznlja, melyek tartalmt s felptst a mellkletben adjuk meg. Hasznlatuk elnye, hogy az Oracle rendszer teleptsvel minden Olvas egysges feladatkrnyezetbe kerl, s mindjrt neki is lthat az egyszerbb lekrdezseknek, nem szksges a fogalmilag bonyolultabb adattbla ltrehozssal kezdenie. (E tblkat generl szkript programokat feltettk a CD-mellkletre, az esetlegesen srlt tblk visszalltshoz.)

    Br a pldatr az elmleti sszefoglalk rvn nmagban is hasznlhat, ajnlott tanknyvknt rendszeresen hivatkozik Kende Mria, Kotsis Domokos s Nagy Istvn Adatbzis-kezels az Oracle rendszerben cm knyvre (PANEM kiad, 2002).

    A pldaanyag sszevlogatsnl gondoltunk az Oracle hasznlatban mr jrtas Olvaskra is. Mind az SQL-lel, mind a PL/SQL-lel foglalkoz fejezetekben helyeztnk el olyan feladatokat, melyeknek megoldsa mg a gyakorlott szakembereket is prbra teheti.

    Azok szmra pedig, akik e pldatron keresztl szeretnnek megismerkedni az Oracle rendszerrel, a mellkletben megadjuk, hogy miknt clszer telepteni az Oracle rendszer fejleszti (egygpes telepts) Personal

    Oracle vltozatt, mi a tartalmuk s az rtelmezsk az Oracle alaptblknak, tovbb miknt kell a parancsnyelv SQL*Plus krnyezetbe belpni, s azt, valamint az

    alapvet SQL utastsokat hasznlni. Vgl ksznetet szeretnnk mondani mindazoknak, akik nlkl ez a knyv sohase

    kszlhetett volna el. Hls ksznetnk Kotsis Domokosnak, akihez mindig fordulhattunk barti, vagy

    szakmai tancsrt, s aki a nlklzhetetlen szakmai krnyezetet biztostotta. Ksznet illeti Czinkczki Lszlt, akinek az inspirl szakmai-barti beszlgetseken tl kzvetlenl ksznhetjk a 13. fejezetet, mivel ennek anyagt tle tanultuk. Ksznetnk Juhsz Istvnnak, immr msodik alkalommal lektorunknak, aki nem csak alapos vizsglja volt vaskos munknknak, hanem tleteivel, javaslataival szemlletet is adott. Nem szeretnnk megfelejtkezni azokrl a kollginkrl, bartainkrl Belle Zsuzsannrl, Csink Lszlrl, Kiss Mariannrl, Lgrdi Gborrl, Losonczi Ilonrl, Radnai Tamsrl, Sntn Tth Editrl, s mindazokrl, akiknek segtsge, bztatsa s javaslatai bepltek a knyvbe.

    Br a felsorols vgre maradtak, tn elre kellett volna venni hallgatinkat, a Budapesti Mszaki Fiskola Mszaki Informatikus s Gazdasgi Informatikus hallgatit, akik nlkl e pldatr egsz biztos, hogy nem kszlt volna el. Br a feladatok ltrejttnek krlmnyei (zrthelyi s vizsgadolgozatok), taln nem a legkellemesebb emlkeket idzik bennk, m az elmlt 10-12 szemeszter sorn ltaluk kitallt szellemes megoldsok csak gy, mint az elkvetett hibk nagyon sok tletet adtak, s egy, a knyv szempontjbl taln nem mellkes bizonysgot, nevezetesen, hogy e pldatr tananyaga (az els 10 fejezet) egy szemeszter alatt megtanulhat... Budapest, 2005. janur 17. A szerzk

  • 16 Oracle-pldatr

    I. RSZ

    FELADATGYJTEMNY

    Bevezets A feladatok az Oracle rendszer alaptblira (emp, dept, s salgrade) vonatkoznak, melyeknek tartalmt, valamint az angol oszlopnevek ltalunk hivatkozott magyar megnevezseit a 2. mellklet, az ezeket generl szkript programokat pedig a CD-mellklet tartalmazza. A kezd olvask szmra javasoljuk a feladatok megoldsa eltt a 3. mellklet alapos ttanulmnyozst.

    A feladatokban ltalban nem adjuk meg, hogy melyik adattblt kell hasznlni, a megfelel adattbla kijellse is rsze a megoldsnak. A feladatok szvegben sokszor az sincs pontosan megadva, hogy mit s hogyan kell pldul listzni (esetleg csak annyi szerepel, hogy listzza azon dolgozkat, vagy listzza azon dolgozk adatait). Ezekben az esetekben a feladat rsze annak megllaptsa, hogy mit clszer, illetve, hogy mit lehet listzni. Ilyenkor gondoljunk arra, hogy egy listnak a felttelek ellenrzse rdekben azokat az adatokat is rdemes tartalmaznia, amelyek a feladatban voltak megfogalmazva.

    Az elmleti sszefoglalkban bemutatott mintapldk SQL*Plus szkript programjai, s a feladatmegoldsok szkript programjai fejezetek szerint csoportostva megtallhatak a CD-mellkleten. Lsd a CD-mellkletrl szl rszt a knyv vgn.

    Vgl megjegyezzk, hogy a 11. fejezet kivtelvel a feladatokat legegyszerbben Scott felhasznlknt oldhatjuk meg. Ehhez az SQL*Plus krnyezetbe val belpskor a scott felhasznlnv s a tiger jelsz megadsa, vagy brmilyen felhasznlknt az SQL*Plus krnyezetbe bejutva, ott a CONNECT scott/tiger SQL*Plus utasts kiadsa szksges.

  • Oracle-pldatr 17

    (2014.01.16.)

    Nhny megjegyzs az elmleti sszefoglalkhoz Az adatbzis-kezels az elmlt tven v alatt tereblyes tudomnny s gyakorlati technolgik gyjtemnyv ntte ki magt. E pldatr clja, hogy korltozott id (egy szemeszter krlbell hrom hnap) alatt lehetv tegye olyan gyakorlati kpessgek elsajttst, melyek rvn az Olvas kzvetlen mdon bekapcsoldhat pldul egy vllalat kontrolling, vagy adatbzis-adminisztrcis munkjba.

    E cl megvalstshoz korltozni kellett a pldatrban trgyalt ismeretek krt. Br mind az SQL, mind a PL/SQL nyelvek utastsai igen bsgesen paramterezhetk (szpen mutatva azokat a vltozatos ignyeket, melyeknek kielgtsre alkalmasak), ma mr a gyakorlott szakemberek sem birtokoljk napi kszsg szintjn az sszes paramterek, opcik hasznlatt.

    A fentiekre tekintettel az egyes tmakrk (fejezetek) elejn tallhat elmleti sszefoglalk clja alapveten csupn annyi, hogy a bemutatott elmleti ismeretekkel, pldkkal kzvetlen (s lehetsg szerint teljes) segtsget adjanak a pldatrban szerepl feladatok megoldshoz. Nem cljuk referenciaknt szolglni, nem kvnjk teht helyettesteni sem a kziknyveket, sem az egy-egy tmaterletet rszletesen feldolgoz szakknyveket. Ennek megfelelen az egyes utastsok bemutatsa, szintaktikai megadsa sem teljes. Az rdekldk szmra azonban minden esetben hivatkozni fogunk az adott terlethez tartoz rszletesebb ismereteket bemutat (alapveten magyar nyelv) szakirodalomra, utalva a pldatr irodalomjegyzkre.

    A szakirodalmi hivatkozsok sorn amikor azt mondjuk, hogy e tmakrrl lsd [...], [...] s [...], akkor ha nem is adjuk meg rtelemszeren hozzgondoljuk az Oracle rendkvl rszletes dokumentcijt (amely a telept csomag rszeknt egy nll CD, irodalomjegyzknkben az ez id szerint legutols [26]-knt szerepel), valamint az Internet korltlan adattrt (melybl azrt nhny hasznosnak tnt azrt felsoroltunk; [27] [60]).

    Az utastsok szintaktikus jellse Az SQL, SQL*Plus s PL/SQL utastsok alapszavait (terminlis szavait) Courier

    tpus nagybetk jelzik (pl. SELECT). Az utastsok magyarz szvegeit (nemterminlisait) Times New Roman dltbetk

    jelzik (pl. OszlopNv). Az egyb, utastsbeli (terminlis) szimblumok szintn Courier tpus

    szimblumok (pl. PROCEDURE(vltoznv IN tpus) alakban a zrjelek). Az alternatvkat egy fggleges vonal ( | ) vlasztja el (pl. ASC | DESC ). Az opcionlis elemek szgletes zrjelben szerepelnek (pl. [DISTINCT] ). A ktelezen megadand alternatvk listjt kapcsos zrjelek hatroljk

    (pl. {rtk | * }, ezek kzl teht az egyiknek szerepelnie kell az utastsban). Az iterci jellsre a hrom pont (...) szolgl (pl. oszlop [, oszlop]...).

  • 18 Oracle-pldatr

    1. FEJEZET

    Egyszer lekrdezsek

    Elmleti sszefoglal

    A SELECT utasts A relcis adatbziskezel-rendszerek szabvnyostott nyelve 1986 ta az SQL (Structured Query Language). Ennek legutols szabvnyostott vltozata az SQL99, illetve a szabvnyosts fzisban vannak az adattrhzak tbbdimenzis relciinak lekrdezsre szolgl multidimenzionlis adatbziskezel nyelvek (lsd OLAP On-line Analytical Processing, illetve DMQL Data Mining Query Language cmszavak alatt a szakirodalomban, pldul a [11], [13] s [24] irodalmakban).

    Az adatbzisok kezelst az SQL rszeit alkot nyelvek utastsaival vgezhetjk. Az adatbzisokat alkot adattblk ltrehozst, szerkezetk mdostst a DDL (Data Definition Language Adatdefincis nyelv), lekrdezst a DQL (Data Query Language Adatlekrdez nyelv), adatokkal val feltltst s az adatok mdostst a DML (Data Manipulation Language Adatmdost nyelv), valamint az egyes adattblk hasznlatnak felhasznli jogostvnyokkal (gynevezett jogosultsgokkal) val korltozst a DCL (Data Control Language Adatvezrl nyelv) vgzi.

    Az Adatlekrdez nyelv legfontosabb utastsa a SELECT, melynek vzlatos felptse: SELECT SzelekcisLista FROM TblaLista [WHERE LogikaiOszlopkifejezs] [GROUP BY CsoportostOszlopkifejezs-lista] [HAVING LogikaiOszlopkifejezs] [ORDER BY RendezOszlopkifejezs-lista];

    ahol a listaelemeket vesszk vlasztjk el. A SELECT utasts egyes rszeit az albbiakban mutatjuk be.

    SzelekcisLista A SzelekcisLista eleme lehet:

  • Oracle-pldatr 19

    (2014.01.16.)

    csillag ()karakter, mely az sszes oszlop kijellsnek szimbluma, Oszlopkifejezs, Oszlopkifejezs AS MsodlagosOszlopnv, Oszlopkifejezs AS MsodlagosOszlopnv. A fentiekben az Oszlopkifejezs oszlopnevekbl, konstansokbl, mveletekbl s

    oszlopokra vonatkoz egysoros s csoportfggvnyekbl ll kifejezs, a MsodlagosOszlopnv egy sszefgg (szkzt nem tartalmaz) karaktersorozat (melyet az Oracle nagybets alakban jelent meg), amely az oszlop jelentsre utal, vgl a MsodlagosOszlopnv egy esetlegesen szkzt is tartalmaz karaktersorozat (melyet az Oracle vltozatlan alakban jelent meg).

    A SzelekcisLista kezddhet a DISTINCT kulcsszval, ha a tbbszrs sormegjelentseket ki akarjuk szrni.

    TblaLista A TblaLista eleme lehet: fizikai, vagy logikai tblanv, fizikai, vagy logikai tblanv SZKZ msodlagos tblanv, (allekrdezs) SZKZ msodlagos tblanv,

    Az allekrdezssel rszletesen a 3. fejezet foglalkozik.

    LogikaiOszlopkifejezs A LogikaiOszlopkifejezs oszlopnevekbl, konstansokbl, mveletekbl, egysoros fggvnyekbl s allekrdezsekbl ll logikai kifejezs, mely tartalmazhat: logikai mveletjeleket

    (AND, OR, NOT), hasonlt mveletjeleket

    (>, >=,

  • 20 Oracle-pldatr

    RendezOszlopkifejezs-lista A RendezOszlopkifejezs-lista elemei:

    Oszlopkifejezs [ASC | DESC] ahol az Oszlopkifejezs oszlopnevekbl, konstansokbl, mveletekbl s oszlopokra

    vonatkoz egysoros s csoportfggvnyekbl ll kifejezs, vagy az ezeket a szelekcis listban jell msodlagos oszlopnv, tovbb az ASC a kdtbla szerint nvekv, a DESC pedig a cskken rendezst rja el (az ASC az alaprtelmezs).

    Megjegyzsek a SELECT utastshoz A megklnbztets rdekben szksg lehet minstett oszlopnevek hasznlatra is,

    melyek alakja: tulajdonosnv.tblanv.oszlopnv, vagy tblanv.oszlopnv (pldul scott.emp.job, vagy emp.job).

    Elfordulhat, hogy egy listzsnl szeretnnk az sszes oszlopon kvl mg nhny kiszmtott (pszeud) oszlopot is megjelenteni. Ekkor a szimblumot minstett nvknt hasznljuk (pldul SELECT emp., sal+NVL(comm,0) FROM emp;).

    A szelekcis lista valamely oszlopkifejezse akkor redukldik egyetlen konstansra, ha azt minden sorba ki szeretnnk ratni. Ilyen eset fordulhat el akkor, ha a feladat ugyanazt a konstans rtket tartalmazza megszortsknt az ellltand lista minden sorra (pldul a listzza ki mindazon clerk foglalkozs jelleg feladatok). Az ilyen konstansok visszarsa a listra (kiemelve a tbla fejlcbe) br ltszlag felesleges helyet foglalnak lnyegesen javtjk annak rtelmezst (lsd ksbb).

    A szelekcis lista tartalmazhat gynevezett egyrtk allekrdezst is (lsd a 3. fejezetet).

    Clszer a rendez oszlopkifejezs-lista elemeit a szelekcis listban feltntetni a lista knnyebb rthetsge rdekben.

    Ha egy SELECT utasts tartalmaz GROUP BY utastsrszt, akkor a szelekcis listban csak olyan oszlop, vagy olyan oszlopra vonatkoz egysoros fggvny szerepelhet, amely oszlop a GROUP BY utastsrszben is szerepel, tovbb csak olyan oszlopra vonatkoz csoportfggvny szerepelhet, amely oszlop a GROUP BY utastsrszben nem szerepel.

    A HAVING utastsrszben ll logikai oszlopkifejezsben csak olyan oszlopkifejezs szerepelhet, amely a GROUP BY utastsrszben is szerepel.

    A rendez oszlopkifejezssel ellenttben a WHERE, a GROUP BY s a HAVING utastsrszekben msodlagos oszlopnv nem szerepelhet.

    1.1. Plda Listzza ki a manager foglalkozs dolgozk nevt, belpsi idejt, rszlegnek azonostjt a nevek szerint cskkenen rendezve. (A01-01.sql) 1. Megolds

    SELECT ename AS "A dolgoz neve",

  • Oracle-pldatr 21

    (2014.01.16.)

    MANAGER AS "foglalkozsa", hiredate AS "belpsi dtuma", deptno AS "rszlegnek aznostja" FROM emp WHERE UPPER(job) = 'MANAGER' ORDER BY ename DESC;

    Eredmny A dolgoz foglalkozsa belpsi rszlegnek aznostja ---------- ------------ --------- ---------------------- JONES MANAGER 81-PR-02 20 CLARK MANAGER 81-JN-09 10 BLAKE MANAGER 81-MJ-01 30

    Megjegyzs

    A kirats lthatan nem pontosan a kvnt oszlopfejlcekkel trtnt. Ennek az az oka, hogy az SQL*Plus krnyezet alaprtelmezse szerint az oszlopnevek az egyes oszlopok deklarcija szerinti mezszlessgben kerlnek kirsra. A karakter tpus adatokat (ide rtve a dtumadatokat is) balra, a szm tpus adatokat pedig alaprtelmezs szerint jobbra igaztja a rendszer. A kirand mezszlessg megvltoztatsa, illetve a specilis oszlopfejlcek kiratsa az SQL*Plus formzsi utastsaival lehetsges (lsd 4. fejezet).

    Megjegyezzk, hogy a HEADING utastsrszben szerepl fejlcszveghez egyarnt hasznlhatjuk a " s a ' szimblumokat.

    Ezekutn nzzk a j megoldst:

    2. Megolds (A j megolds) COLUMN ename FORMAT A14 COLUMN ename HEADING "A dolgoz neve" COLUMN hiredate FORMAT A15 COLUMN hiredate HEADING 'belpsi dtuma' COLUMN deptno HEADING 'rszlegnek azonostja' SELECT ename, 'MANAGER ' AS "foglalkozsa", hiredate, deptno FROM emp WHERE UPPER(job) = 'MANAGER' ORDER BY ename DESC; CLEAR COLUMNS SELECT ename, 'MANAGER ' AS "foglalkozsa", hiredate, deptno FROM emp WHERE UPPER(job) = 'MANAGER' ORDER BY ename DESC;

    Az eredmnytblk A dolgoz neve foglalkozsa belpsi dtuma rszlegnek azonostja -------------- ------------ --------------- ----------------------- JONES MANAGER 81-PR-02 20 CLARK MANAGER 81-JN-09 10 BLAKE MANAGER 81-MJ-01 30

  • 22 Oracle-pldatr

    ENAME foglalkozsa HIREDATE DEPTNO ---------- ------------ --------- ---------- JONES MANAGER 81-PR-02 20 CLARK MANAGER 81-JN-09 10 BLAKE MANAGER 81-MJ-01 30

    Megjegyzs

    A fenti pldban a numerikus oszlop fejlcnek kiratshoz a szmadatok automatikus jobbra tmrtse miatt nem volt szksg a mezszlessg belltsra.

    Ne felejtkezznk el a listzst kveten a formzsnak az alaprtelmezs szerinti alakra val visszalltsrl a CLEAR COLUMNS parancs segtsgvel.

    Specilis fggvnyek Az albbiakban bemutatsra kerl sorfggvnyek elssorban a tblaadatok megjelentsre szolglnak, de bizonyos esetekben a specilis adatok bevitelhez is hasznlhatjuk ket.

    NVL fggvny Az NVL fggvny a NULL rtket (a hinyz rtket) tnyleges rtkk alaktja t. A fggvny visszatrsi rtke a baloldali paramternek aktulis rtke (operandus), ha az nem NULL, egybknt a visszaadott rtk a helyettest paramter rtke lesz. A fggvny alakja:

    NVL(operandus, helyettest)

    Az operandus egy oszlopnv, a helyettest lehet literl, oszlopnv vagy kifejezs. A helyettest adattpusnak meg kell egyeznie az operandus adattpusval. Az NVL fggvny numerikus, dtum s karakteres adatoknl hasznlhat. Pldul NVL(fizets,0), NVL(belps,sysdate), NVL(munkakr,'mg nincs').

    Az NVL fggvny azrt szksges, mert ha egy kifejezsben NULL rtk szerepel, akkor a kifejezs rtke is NULL lesz, az NVL fggvny hasznlatval azonban az eredmny mr rtkelhetv vlik.

    DECODE fggvny Egy lista eredmnynek ttekinthetsgt nvelhetjk a DECODE fggvny hasznlatval, melynek szintaktikja az albbi:

    DECODE(oszlopkifejezs, h1,t1 [, h2,t2]..., kifejezs)

    A kirtkels soronknt megvizsglja az aktulis adattblra az oszlopkifejezs-t, mely egy, vagy tbb oszlopnevet is tartalmaz egysoros fggvny. Ha az oszlopkifejezs rtke h1, akkor a fggvny rtke t1, stb., egybknt pedig a kifejezs rtke (ahol ez utbbi hivatkozhat valamely oszlopra, rendszervltozra, de lehet konstanskifejezs is).

  • Oracle-pldatr 23

    (2014.01.16.)

    CASE kifejezs A CASE kifejezs segtsgvel ltrehozhatunk olyan pszeudooszlopot, melynek az rtke valamilyen kifejezstl fgg. Ennek szintaktikja:

    CASE WHEN LogikaiKifejezs THEN VisszatrKifejezs [WHEN LogikaiKifejezs THEN VisszatrKifejezs]... [ELSE VisszatrKifejezs] END

    illetve CASE oszlopkifejezs WHEN rtk THEN VisszatrKifejezs [WHEN rtk THEN VisszatrKifejezs]... [ELSE VisszatrKifejezs] END

    A CASE kifejezs hasznlata esetn az els esetben a rendszer megkeresi az els WHENTHEN prost, s megvizsglja a LogikaiKifejezs rtkt. Ha ez igaz (TRUE), akkor a fggvny rtke a VisszatrKifejezs lesz, ha hamis (FALSE), akkor megy tovbb a kvetkez WHENTHEN prosra. Amennyiben ezek egyikben sem tallt egyezsget, a fggvny rtke az ELSE g VisszatrKifejezse lesz. A LogikaiKifejezs termszetesen tartalmazhat oszlopkifejezst is.

    A CASE kifejezs msodik alakjnl az az aktulis VisszatrKifejezs, amelyikhez tartoz WHEN melletti rtket felveszi a CASE mellett ll oszlopkifejezs.

    Megjegyezzk, hogy a CASE kifejezs matematikai rtelemben fggvnynek is tekinthet, hiszen az oszlopkifejezst, mint paramtert lekpezi a VisszatrKifejezs rtkre.

    Megjegyzs

    A DECODE fggvny s a CASE kifejezs sok tekintetben hasonlak. Klcsnsen egymsba gyazhatk, s mindkettnl gyelni kell, hogy az sszehasonltott, s a visszaadott rtkek azonos tpusak legyenek, illetve ez utbbi lehet NULL rtk is. Az sszehasonltsnl gyeljnk arra, hogy ha a vizsglt oszlopkifejezs esetleges NULL rtkre szeretnnk felttelt adni, akkor az NVL fggvnnyel egy olyan rtket rendeljnk a NULL rtkhez, mely az rtktartomnyos kvl esik (lsd az albbi pldt).

    A CASE kifejezs tbblettudsa tbbek kztt annak ksznhet, hogy a benne szerepl LogikaiKifejezs tartalmazhat gynevezett allekrdezst is (lsd a 3. fejezetet).

    1.2. Plda Listzza a dolgozk nevt, munkakrt s jutalkt olymdon, hogy akinek nincs jutalka, annl azt rja ki, hogy Nem jr jutalk. 1. Megolds (DECODE fggvnnyel)

    SELECT ename AS Neve,

  • 24 Oracle-pldatr

    job AS Munkakr, DECODE(NVL(comm,-1), -1, 'Nem jr jutalk', comm) AS Jutalk FROM emp;

    2. Megolds (CASE kifejezssel oszlopkifejezssel) SELECT ename AS Neve, job AS Munkakr, CASE NVL(comm,-1) WHEN -1 THEN 'Nem jr jutalk' ELSE TO_CHAR(comm) END AS Jutalk FROM emp;

    3. Megolds (CASE kifejezssel oszlopkifejezs nlkl) SELECT ename AS Neve, job AS Munkakr, CASE WHEN NVL(comm,-1) = -1 THEN 'Nem jr jutalk' ELSE TO_CHAR(comm) END AS Jutalk FROM emp;

    Eredmny (mindhrom esetben) NEVE MUNKAKR JUTALK ---------- --------- ---------------------------------------- KING PRESIDENT Nem jr jutalk BLAKE MANAGER Nem jr jutalk CLARK MANAGER Nem jr jutalk JONES MANAGER Nem jr jutalk MARTIN SALESMAN 1400 ALLEN SALESMAN 300 TURNER SALESMAN 0 JAMES CLERK Nem jr jutalk WARD SALESMAN 500 FORD ANALYST Nem jr jutalk SMITH CLERK Nem jr jutalk SCOTT ANALYST Nem jr jutalk ADAMS CLERK Nem jr jutalk MILLER CLERK Nem jr jutalk 14 sor kijellve.

    Megjegyzs

    Az NVL fggvnnyel a comm oszlop NULL rtkhez a -1 rtket rendeltk, mert ez kvl esik a comm megengedett rtktartomnyn. Ha pldul a 0 rtket hasznltuk volna hozzrendelsi rtkknt, akkor Turner esetn is a Nem jr jutalk zenet jelent volna meg, holott e dolgoznak ltalban lehet jutalka, csak ppen ebben a hnapban nem volt (azaz 0 volt).

    Figyeljnk fel arra, hogy a CASE hasznlata esetn szksg volt a TO_CHAR konvertl fggvny hasznlatra is.

  • Oracle-pldatr 25

    (2014.01.16.)

    Karakterkezel fggvnyek Az SQL karakterkezel fggvnyei igen sokoldalak; alapveten megjelentshez hasznljuk (lsd 1.5 plda: Helytakarkos listzs, vagy 1.8. plda: Formzott kirats az SQL-ben), de szvegkeresre ppgy alkalmasak (lsd 1.3. s 1.4. plda: Szvegkeress), mint diagrammok kvzi-grafikus megjelentsre (lsd 1.6. s 1.7. plda: Grafikus megjelents).

    A karakterkezel fggvnyek bemen s kimen paramtere karakter, karaktersorozat (kivtel a CHR s a LENGTH fggvny).

    Az Oracle rendszer teleptsnl clszer az alaprtelmezett (default) adatbzis karakterkszletet vlasztani (lsd 1. mellklet), s felttlenl kerljk az Unicode (UTF8) karakterkszlet belltst, mivel mg a 9.2. verziban is a karakterkezel fggvnyek ez utbbit hibsan kezelik. (Ezen kvl hibsan kezeli mg az SQL*Plus COLUMN utastsa is, lsd 4. fejezet.)

    Az albbi karakterkezel fggvnyek mind SQL fggvnyek, gy nem csupn az SQL*Plus krnyezetben hasznlhatk (rszletesen lsd [16]):

    LOWER({oszlop | kifejezs}) Karakterlnc minden betjt kisbetv alaktja t. UPPER({oszlop | kifejezs}) Karakterlnc minden betjt nagybetv alaktja t. INITCAP({oszlop | kifejezs}) Minden sz els betjt nagybetv, a tbbit

    kisbetv alaktja t. CONCAT({oszlop1 | kifejezs1},

    {oszlop2 | kifejezs2}) A kt megadott karakterlncot sszefzi. Hatsa azonos az (||) sszefzs opertorral.

    SUBSTR({oszlop | kifejezs}, m [, n])

    A karakterlnc m-edik pozcijtl kezdden n karaktert ad vissza (n hinya esetn az sszeset).

    LENGTH({oszlop | kifejezs}) A karakterlnc hosszt adja vissza. INSTR({oszlop | kifejezs},

    minta [, m [, n] ])

    A minta karaktersorozatnak az els paramterknt megadott karaktersorozatbeli pozcijt adja vissza. Ha a visszatr rtk nulla, akkor nem tallt. Az opcionlis paramterek jelentse: m: kezdpozci, n: n-ik elforduls:

    LPAD({oszlop | kifejezs}, n [, kitlt ])

    Jobbra igaztja a karakterlncot, s balrl kiegszti a kitlt karakterrel olymdon, hogy a hossza ppen n legyen. A kitlt karakter hinya esetn szkz karaktert hasznl.

    RPAD({oszlop | kifejezs}, n [, kitlt])

    Balra igaztja a karakterlncot, s jobbrl kiegszti a kitlt karakterrel olymdon, hogy a hossza ppen n legyen. A kitlt karakter hinya esetn szkz karaktert hasznl.

    CHR(karakterkd) A decimlisan megadott kd karaktert adja vissza. Nhny gyakran hasznlt karakter kdja: soremels (LF): 10, (vezrl karakter) tabulls (TAB): 9, (vezrl karakter) szkz (SPACE): 32.

  • 26 Oracle-pldatr

    1.3. Plda (Szvegkeress) Az albbi pldban bemutatjuk a SUBSTR fggvny hasznlatt. 1.) A SUBSTR fggvny alkalmazsa adattbla oszlopon hosszmegads nlkl

    SELECT ename, SUBSTR(ename,1) FROM emp WHERE deptno = 10;

    Eredmny ENAME SUBSTR(ENA ---------- ---------- KING KING CLARK CLARK MILLER MILLER

    2.) Alkalmazs adattbla oszlopon hosszmegadssal SELECT ename, SUBSTR(ename,3,4) FROM emp WHERE deptno = 10;

    Eredmny ENAME SUBS ---------- ---- KING NG CLARK ARK MILLER LLER

    3.) Alkalmazs karakteres konstanson SELECT SUBSTR('ABRAKADABRA',3,5) FROM dual;

    Eredmny SUBST ----- RAKAD

    1.4. Plda (Szvegkeress) Az albbi pldban bemutatjuk az INSTR fggvny hasznlatt. 1.) Az INSTR fggvny hasznlata az opcionlis paramterek nlkl

    1.A) Alkalmazs adattbla oszlopon SELECT ename, INSTR(ename,'AR') FROM emp;

    Eredmny ENAME INSTR(ENAME,'AR') ---------- ----------------- KING 0 BLAKE 0 CLARK 3 JONES 0 MARTIN 2 ALLEN 0

  • Oracle-pldatr 27

    (2014.01.16.)

    TURNER 0 JAMES 0 WARD 2 FORD 0 SMITH 0 SCOTT 0 ADAMS 0 MILLER 0 14 sor kijellve.

    1.B) Alkalmazs karakteres konstanson SELECT INSTR('ABRADAKADRA','AD') FROM dual;

    Eredmny INSTR('ABRADAKADRA','AD') ------------------------- 4

    2.) Az INSTR fggvny hasznlata az opcionlis paramterekkel

    2.A) Az els elforduls az els karaktertl SELECT INSTR('ABRADAKADRA','AD',1) FROM dual;

    Eredmny INSTR('ABRADAKADRA','AD',1) --------------------------- 4

    2.B) A msodik elforduls az els karaktertl SELECT INSTR('ABRADAKADRA','AD',1,2) FROM dual;

    Eredmny INSTR('ABRADAKADRA','AD',1,2) ----------------------------- 8

    2.C) Az els elforduls az tdik karaktertl SELECT INSTR('ABRADAKADRA','AD',5) FROM dual;

    Eredmny INSTR('ABRADAKADRA','AD',5) --------------------------- 8

    2.D) A msodik elforduls az tdik karaktertl SELECT INSTR('ABRADAKADRA','AD',5,2) FROM dual;

    Eredmny INSTR('ABRADAKADRA','AD',5,2)

  • 28 Oracle-pldatr

    ----------------------------- 0

    1.5. Plda (Helytakarkos listzs) Listzza az 1.2. plda feladatnak megoldst helytakarkos mdon gy, hogy a szveges megjegyzs kirsnak csak 16 karaktert engedlyez (a SUBSTR fggvny hasznlatval). 1. Megolds (DECODE fggvnnyel)

    SELECT ename AS Neve, job AS Munkakr, DECODE(NVL(comm,-1), -1, 'Nem jr jutalk', SUBSTR(TO_CHAR(comm),1,16)) AS Jutalk FROM emp;

    2. Megolds (CASE kifejezssel) SELECT ename AS Neve, job AS Munkakr, CASE NVL(comm,-1) WHEN -1 THEN 'Nem jr jutalk' ELSE SUBSTR(TO_CHAR(comm),1,16) END AS Jutalk FROM emp;

    Eredmny (mindkt esetben) NEVE MUNKAKR JUTALK ---------- --------- ---------------- KING PRESIDENT Nem jr jutalk BLAKE MANAGER Nem jr jutalk CLARK MANAGER Nem jr jutalk JONES MANAGER Nem jr jutalk MARTIN SALESMAN 1400 ALLEN SALESMAN 300 TURNER SALESMAN 0 JAMES CLERK Nem jr jutalk WARD SALESMAN 500 FORD ANALYST Nem jr jutalk SMITH CLERK Nem jr jutalk SCOTT ANALYST Nem jr jutalk ADAMS CLERK Nem jr jutalk MILLER CLERK Nem jr jutalk 14 sor kijellve.

    1.6. Plda (Grafikus megjelents) Listzza ki az sszes alkalmazott nevt s fizetst egy oszlopban a fizetsk szerint cskkenen. A fizetst jelentse meg gy, hogy minden 1000 USD-t egy # szimblum jelljn. Legyen a kt oszlop kztt az elvlaszt jel a kettspont. A megjelentend oszlopnak adjon rtelmes msodlagos nevet. (Hasznlja az LPAD s RPAD fggvnyeket.) 1. Megolds (Az RPAD fggvny s konstans oszlop hasznlatval)

    SELECT RPAD(ename,6) || RPAD(':', ROUND((sal/1000),0)+1, '#') AS "Az alkalmazottak s fizetsk"

  • Oracle-pldatr 29

    (2014.01.16.)

    FROM emp ORDER BY sal DESC;

    Eredmny Az alkalmazottak s fizetsk ------------------------------------------------------------------------- KING :##### FORD :### SCOTT :### JONES :### BLAKE :### CLARK :## ALLEN :## TURNER:## MILLER:# MARTIN:# WARD :# ADAMS :# JAMES :# SMITH :# 14 sor kijellve.

    Megjegyzs

    Az RPAD fggvnyt ekkor a kvetkezkppen hasznltuk. Oszlopnvknt a : konstanst megadva, termszetesen a : konstans oszloprtkeket kaptuk. Mivel kitlt karakterknt a # konstanst rtuk el, ezrt a msodik paramterknt megadott mezhossz (melyhez termszetesen hozzadtunk 1-et a : oszloprtk miatt) tulajdonkppen egy grafikus fggvnybrzolst eredmnyez.

    Az RPAD(ename,6) megjelentsbl lthat, hogy a kitlt karakter megadsnak elhagysa esetn, az alaprtelmezs a szkz karakter.

    A fenti megjelentst javthatjuk egyrszt a nevek mell helyezett elvlaszt szkzkkel, msrszt a SUBSTR fggvny mezszlessg-korltoz hatsval.

    2. Megolds SELECT SUBSTR(RPAD(ename,6) || RPAD(' ',5) || RPAD(':', ROUND((sal/1000),0)+1, '#'), 1, 30) AS "Az alkalmazottak s fizetsk" FROM emp ORDER BY sal DESC;

    Eredmny Az alkalmazottak s fizetsk ------------------------------ KING :##### FORD :### SCOTT :### JONES :### BLAKE :### CLARK :## ALLEN :## TURNER :## MILLER :# MARTIN :#

  • 30 Oracle-pldatr

    WARD :# ADAMS :# JAMES :# SMITH :# 14 sor kijellve.

    1.7. Plda (Grafikus megjelents) Oldja meg az elz feladatot olymdon, hogy a fizets grafikus kiratsa utn kirja azt numerikusan is, tovbb az egyes dolgozk munkakrt is. A lista formzsa legyen helytakarkos.

    1. Megolds SELECT SUBSTR(RPAD(ename,6) || RPAD(' ',7) || RPAD(': ', ROUND((sal/1000),0)+2, '#'), 1, 25) || LPAD(sal, 8) AS "Dolgoz neve : fizetse", job AS "munkakre" FROM emp ORDER BY sal DESC;

    Eredmny Dolgoz neve : fizetse munkakre --------------------------------- --------- KING : ##### 5000 PRESIDENT FORD : ### 3000 ANALYST SCOTT : ### 3000 ANALYST JONES : ### 2975 MANAGER BLAKE : ### 2850 MANAGER CLARK : ## 2450 MANAGER ALLEN : ## 1600 SALESMAN TURNER : ## 1500 SALESMAN MILLER : # 1300 CLERK MARTIN : # 1250 SALESMAN WARD : # 1250 SALESMAN ADAMS : # 1100 CLERK JAMES : # 950 CLERK SMITH : # 800 CLERK 14 sor kijellve.

    2. Megolds SELECT SUBSTR(RPAD(ename,6) || RPAD(' ',7) || RPAD(': ', ROUND((sal/1000),0)+2, '#') || RPAD(' ', 5-ROUND((sal/1000),0)) || LPAD(sal, 6), 1, 27) AS "Dolgoz neve : fizetse", job AS "munkakre" FROM emp ORDER BY sal DESC;

    Eredmny Dolgoz neve : fizetse munkakre --------------------------- --------- KING : ##### 5000 PRESIDENT FORD : ### 3000 ANALYST SCOTT : ### 3000 ANALYST

  • Oracle-pldatr 31

    (2014.01.16.)

    JONES : ### 2975 MANAGER BLAKE : ### 2850 MANAGER CLARK : ## 2450 MANAGER ALLEN : ## 1600 SALESMAN TURNER : ## 1500 SALESMAN MILLER : # 1300 CLERK MARTIN : # 1250 SALESMAN WARD : # 1250 SALESMAN ADAMS : # 1100 CLERK JAMES : # 950 CLERK SMITH : # 800 CLERK 14 sor kijellve.

    1.8. Plda (Adatformzs SQL-ben) Listzza a fizets szerint cskkenen rendezve az eladk (salesman) s a hivatalnokok (clerk) nevt, munkakrt fizetst, jutalkt, valamint a jutalk-fizets arnyukat. 1. Megolds

    SELECT ename AS DolgozNeve, job AS Munkakre, sal AS Fizetse, comm AS Jutalka, CASE NVL(comm,0) WHEN 0 THEN NULL ELSE NVL(comm,0)/sal END AS Jutalkarnya FROM emp WHERE UPPER(job) IN ('SALESMAN','CLERK') ORDER BY sal DESC;

    Eredmny DOLGOZNEV MUNKAKRE FIZETSE JUTALKA JUTALKARNYA ---------- --------- ---------- ---------- ------------- ALLEN SALESMAN 1600 300 .1875 TURNER SALESMAN 1500 0 MILLER CLERK 1300 MARTIN SALESMAN 1250 1400 1.12 WARD SALESMAN 1250 500 .4 ADAMS CLERK 1100 JAMES CLERK 950 SMITH CLERK 800 8 sor kijellve.

    2. Megolds (Formzott kirssal) SELECT RPAD(ename,11) AS "DolgozNeve", SUBSTR(job,1,9) AS "Munkakre", LPAD(sal,8) AS "Fizetse", LPAD(comm,8) AS "Jutalka", CASE NVL(comm,0) WHEN 0 THEN NULL ELSE TO_CHAR(NVL(comm,0)/sal,'999999990.99') END AS "JutalkArnya" FROM emp WHERE UPPER(job) IN ('SALESMAN','CLERK') ORDER BY sal DESC;

  • 32 Oracle-pldatr

    Eredmny DolgozNeve Munkakre Fizetse Jutalka JutalkArnya ----------- --------- -------- -------- ------------- ALLEN SALESMAN 1600 300 0.19 TURNER SALESMAN 1500 0 MILLER CLERK 1300 MARTIN SALESMAN 1250 1400 1.12 WARD SALESMAN 1250 500 0.40 ADAMS CLERK 1100 JAMES CLERK 950 SMITH CLERK 800 8 sor kijellve.

    Dtumok s szmok formzott megjelentse Az aktulis dtumot (s termszetesen az idt is) a rendszerdtumbl (sysdate) llthatjuk el. Karakterlncbl (vagy szmbl) dtumformtumot a TO_DATE fggvnnyel, dtumbl, vagy szmbl formzott karakterlncot pedig a TO_CHAR fggvnnyel llthatunk el. (E fggvnyek SQL eszkzk, teht nem csupn SQL*Plus krnyezetben hasznlhatak.) A dtumrtkek kztt vgezhetnk kivonst az eltelt id meghatrozsra. (Mindez rszletesen megtallhat a [12] s [16] irodalmakban. Az SQL*Plus formzsi lehetsgeit a 4. fejezetben mutatjuk be.)

    Hasznlatuk szintaktikja:

    TO_DATE({karakterlnc | szm} [,'formtummaszk']) TO_CHAR({dtum | szm} [,'formtummaszk'])

    ahol formtummaszk hinyban dtum esetn az alaprtelmezett dtumforma szerint,

    szm esetn pedig az brzolshoz szksges mret szerint trtnik a konverzi, a formtummaszk elemei az albbi tblzatok dtum- s szmformtumaibl

    llthatk ssze.

    Formtummaszkok:

    A TO_DATE s a TO_CHAR fggvnyekben egyarnt hasznlhat dtumformtum elemek (nem teljes a felsorols):

    Formtum Lers YYYY a teljes vszm YEAR a teljes vszm betkkel MM a hnap neve kt szmjeggyel MONTH a hnap teljes neve MON a hnap nevnek hrom nagybets rvidtse mon a hnap nevnek hrom kisbets rvidtse WW a ht sorszma az vben W a ht sorszma a hnapban

  • Oracle-pldatr 33

    (2014.01.16.)

    DDD a nap sorszma az vben DD a nap sorszma a hnapban D a nap sorszma a hten DY a ht napjnak hrombets rvidtse DAY a nap teljes neve HH az ra (1-12) HH12 az ra (1-12) HH24 az ra (1-24) MI a perc SS a msodperc SSSSS az jfl ta eltelt msodpercek szma /,-:._ szkz

    a dtumelemek kztt hasznlhat elvlaszt karakterek (a TO_CHAR elhelyezi, a TO_DATE figyelmen kvl hagyja)

    a TO_CHAR fggvnyben alkalmazhat szmformtum elemek (ez sem teljes):

    Formtum Lers 9999000 a nullk vagy kilencesek szma hatrozza meg

    a megjelenthet szmjegyek szmt (a mellkelt plda 7 jegy egsz szm kiratst engedlyezi, az els hrom helyirtken vezet nullval)

    99999 5 rtkes szmjegy, vezet nullk nem jelennek meg 09999 5 rtkes szmjegy, ugyanennyi vezet nullval egytt 0999.999 4 egszjegy, vezet nullval, hrom tizedessel S9999 az S karakter helyn az eljel jelenik meg $9999 minden szm el $ jel kerl L999 az L karakter helyn a helyi pnznem jelenik meg . a tizedes pont jele , az ezres csoportosts elvlaszt jele

    Rendszer dtum-id formtum belltsa A rendszer dtum-id formtumnak belltsa az

    ALTER SESSION SET NLS_DATE_FORMAT = 'formtummaszk';

    utastssal trtnhet, ahol a formtummaszk a fenti dtumformtum elemekbl llthat ssze.

    Rendszerdtum formtumnak belltsa nap felbontsban (egy lehetsges eset)

    ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY.MM.DD'; Rendszerdtum formtumnak belltsa msodperc felbontsban (egy lehetsges eset)

    ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS';

    Dtum s id megjelentse s hasznlata

  • 34 Oracle-pldatr

    A kvetkez mintapldkban bemutatjuk a dtum s id kezelsben legfontosabb ngy fggvny, a TO_DATE, a TO_CHAR, a TO_NUMBER konverzis fggvnyek, valamint az aktulis dtumot (s idt) megad sysdate dtumfggvny hasznlatt. (Rszletesebben lsd a [16]-ban s a [12]-ben.)

    1.9. Plda E pldban bemutatjuk az aktulis dtum s id formtummaszkos megjelentst.

    1.) Az aktulis dtum a rendszer dtumformtumban SELECT RPAD('sysdate', 13) AS "Dtumfggvny", LPAD(sysdate, 25) AS "A rendszer dtumformtuma" FROM dual;

    Eredmny Dtumfggvny A rendszer dtumformtuma ------------- ------------------------- sysdate 04-DEC-19

    2.) Az aktulis dtum a magyar dtumformtumban SELECT RPAD('YYYY.MM.DD.', 15) AS "A formtummaszk", LPAD(TO_CHAR(sysdate,'YYYY.MM.DD.'), 23) AS "A magyar dtumformtuma" FROM dual;

    Eredmny A formtummaszk A magyar dtumformtuma --------------- ----------------------- YYYY.MM.DD. 2004.12.19.

    3.) Az alaprtelmezett aktulis rendszerdtum-id SELECT RPAD('YYYY.MM.DD, HH24:MI:SS', 22) AS "A formtummaszk", RPAD(TO_CHAR(sysdate,'YYYY.MM.DD, HH24:MI:SS'), 21) AS "Az aktulis dtum-id" FROM dual;

    Eredmny A formtummaszk Az aktulis dtum-id ---------------------- --------------------- YYYY.MM.DD, HH24:MI:SS 2004.12.19, 13:07:52

    4.) Az aktulis id SELECT RPAD('HH:MI:SS', 15) AS "A formtummaszk", LPAD(TO_CHAR(sysdate,'HH:MI:SS'), 8) AS "Id(12)" FROM dual;

    Eredmny A formtummaszk Id(12) --------------- -------- HH:MI:SS 01:11:24

    5.) Az aktulis id 24 rs formtumban

  • Oracle-pldatr 35

    (2014.01.16.)

    SELECT RPAD('HH24/MI', 15) AS "A formtummaszk", LPAD(TO_CHAR(sysdate,'HH24/MI'), 7) AS "Id(24)" FROM dual;

    Eredmny A formtummaszk Id(24) --------------- ------- HH24/MI 13/13

    1.10. Plda E pldban bemutatjuk a TO_DATE fggvny hasznlatt. 0.) A rendszerdtum formtumnak belltsa

    ALTER SESSION SET NLS_DATE_FORMAT = 'YY-MM-DD';

    Eredmny A munkamenet mdostva.

    1.) A TO_DATE fggvny hasznlata formtummaszkkal karakterlnc esetn SELECT RPAD('''20041214'',YYYYMMDD', 24) AS "Karakterlnc s formtum", LPAD(TO_DATE('20041214','YYYYMMDD'), 16) AS "Konvertlt dtum" FROM dual;

    Eredmny Karakterlnc s formtum Konvertlt dtum ------------------------ ---------------- '20041214',YYYYMMDD 04-DEC-14

    2.) A TO_DATE fggvny hasznlata formtummaszkkal szm esetn SELECT RPAD('20041214,YYYYMMDD', 17) AS "Szm s formtum", LPAD(TO_DATE(20041214,'YYYYMMDD'), 16) AS "Konvertlt dtum" FROM dual;

    Eredmny Szm s formtum Konvertlt dtum ----------------- ---------------- 20041214,YYYYMMDD 04-DEC-14

    1.11. Plda Az albbiakban sszefoglaljuk a dtumformk s a dtumfggvnyek hasznlatt. Az egyes dtumkir utastsok s futsi eredmnyk rtkelsnl vegyk figyelembe a rendszer aktulis dtumformtumt!

    1.) lltsuk be a rendszerdtum formtumt vszzadot NEM tartalmaz alakra, s adjunk meg vszzadhinyos, mlt szzadi dtumot ALTER SESSION SET NLS_DATE_FORMAT = 'YY-MON-DD'; SELECT RPAD('81-JAN-10',14) AS "Megadott dtum", LPAD (TO_DATE('81-JAN-10'),16) AS "Konvertlt dtum"

  • 36 Oracle-pldatr

    FROM dual;

    Eredmny A munkamenet mdostva. Megadott dtum Konvertlt dtum -------------- ---------------- 81-JAN-10 81-JAN-10

    2.) Irassuk a fenti dtumot teljes vszzados formtumban SELECT RPAD('81-JAN-10',14) AS "Megadott dtum", LPAD (TO_CHAR(TO_DATE('81-JAN-10'),YYYY-MON-DD),16) AS "Konvertlt dtum" FROM dual;

    Eredmny Megadott dtum Konvertlt dtum -------------- ---------------- 81-JAN-10 2081-JAN-10

    Megjegyzs

    Teht az vszzad nlkl megadott dtum 21. szzadi dtumot jelent, ami kiderl abbl, ha vszzadot tartalmaz formtumban ratjuk ki.

    3.) Az eltelt vek szmnak meghatrozsa SELECT LPAD(TO_NUMBER(TO_CHAR(TO_DATE('81-JAN-10'), 'YYYY')) - TO_NUMBER(TO_CHAR(sysdate, 'YYYY')), 14) AS "Dtum - MaiNap" FROM dual;

    Eredmny Dtum - MaiNap -------------- 77

    Megjegyzs

    A 2081-2004 valban 77 v. Ez szmrtkileg helyes, egybknt nem.

    4.) Vltsunk t a magyar dtumformra, s most is krdezzk le ugyanazt a dtumot ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY.MM.DD'; SELECT RPAD('81-JAN-10',14) AS "Megadott dtum", LPAD (TO_CHAR(TO_DATE('81-JAN-10'),'YYYY-MON-DD'),16) AS "Konvertlt dtum" FROM dual;

    Eredmny A munkamenet mdostva. Megadott dtum Konvertlt dtum -------------- ---------------- 81-JAN-10 0081-JAN-10

    Megjegyzs

    Teht az vszzad nlkl megadott dtum magyar dtumformtummal 0081 lesz.

  • Oracle-pldatr 37

    (2014.01.16.)

    5.) Az eltelt vek szmnak meghatrozsa SELECT LPAD(TO_NUMBER(TO_CHAR(TO_DATE('81-JAN-10'), 'YYYY')) - TO_NUMBER(TO_CHAR(sysdate, 'YYYY')), 14) AS "Dtum - MaiNap" FROM dual;

    Eredmny Dtum - MaiNap -------------- -1923

    Megjegyzs

    Teht 1923 v telt el 81.jan.10. ta. Szmrtkileg ez is helyes, de egybknt nem.

    6.) lltsuk vissza a rendszer dtumformjt alaprtelmezsre ALTER SESSION SET NLS_DATE_FORMAT = 'YY-MON-DD'; SELECT sysdate FROM dual;

    Eredmny A munkamenet mdostva. SYSDATE --------- 04-DEC-24

    Megjegyzs

    Ha a rendszerdtum vszzadmegadst nem tartalmaz, akkor a hinyos dtumot 21. szzadiknt (teht a 81-JAN-10 alakot 2081-JAN-10 dtumknt), ha pedig vszzadmegadst tartalmaz, akkor 1. szzadiknt rtelmezi (teht a 81-JAN-10 alakot 0081-JAN-10 dtumknt).

    A fentiek tanulsga az, hogy fokozottan gyelni kell a hinyos (vszzadmegadst nem tartalmaz) dtumforma hasznlatra, mivel annak rtelmezse fgg az aktulis rendszerdtum belltstl. Ha a rendszerdtum formtumnak aktulis llapottl fggetlenl akarunk korbbi vszzadi dtumot megadni, akkor azt clszer vszzad megjellssel tenni (pldul '1981.JAN.10' alakban).

    Figyeljnk fel arra, hogy a TO_DATE fggvny, mely alapfunkcijaknt a karakteres megads dtumot dtumtpusra konvertlja, automatikus dtumkonverzit is vgez a mindenkori rendszerdtum formtumra.

    1.12. Plda E pldban bemutatjuk az eltelt id meghatrozsnak mdjt, ha a felbontst napokban, hnapokban, illetve vekben szeretnnk megkapni.

    1.) Az eltelt id meghatrozsa (Az eredmny napokban)

    1.A mdszer SELECT LPAD(ROUND(sysdate - TO_DATE('2003-DEC-19')), 21) AS "Eltelt id (napokban)" FROM dual;

    1.B mdszer

  • 38 Oracle-pldatr

    SELECT LPAD(ROUND(sysdate - TO_DATE('2003-DEC-19','YYYY-MM-DD')), 21) AS "Eltelt id (napokban)" FROM dual;

    1.C mdszer SELECT LPAD(ROUND(sysdate - TO_DATE(20031219,'YYYYMMDD')), 21) AS "Eltelt id (napokban)" FROM dual;

    Eredmny (Mindhrom mdszer esetn) Eltelt id (napokban) --------------------- 368

    2.) Az eltelt id meghatrozsa (Az eredmny hnapokban) SELECT LPAD(ROUND(MONTHS_BETWEEN(sysdate, TO_DATE('2003-DEC-19'))), 23) AS "Eltelt id (hnapokban)" FROM dual;

    Eredmny Eltelt id (hnapokban) ----------------------- 12

    Megjegyzs

    A MONTHS_BETWEEN fggvny az eltelt id rtket trthnapknt (azaz pontos rtkknt) adja vissza.

    3.) Az eltelt id meghatrozsa (Az eredmny vekben)

    3.A mdszer SELECT LPAD(TO_NUMBER(TO_CHAR(sysdate, 'YYYY')) - TO_NUMBER(TO_CHAR(TO_DATE('2003-DEC-19'),'YYYY')), 20) AS "Eltelt id (vekben)" FROM dual;

    3.B mdszer SELECT LPAD(ROUND(MONTHS_BETWEEN(sysdate, TO_DATE('2003-DEC-19'))/12), 20) AS "Eltelt id (vekben)" FROM dual;

    Eredmny (Mindkt mdszer esetn) Eltelt id (vekben) -------------------- 1

    1.13. Plda E pldban az aktulis s az eltelt id megjelentst mutatjuk be. Ez utbbit olymdon, hogy a felbonts legyen msodperc, illetve nap.

    1.) A dtum-id kiratsa a rendszer dtumformtumban ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY/MM/D