Eksplitsiitne kursor vs kaudne kursor
Andmebaaside puhul on kursor juhtstruktuur, mis võimaldab liikuda üle andmebaasi kirjete. Kursor pakub mehhanismi SQL-i valikulausele nime määramiseks ja seejärel saab seda kasutada selles SQL-lauses oleva teabega manipuleerimiseks. Kaudsed kursorid luuakse automaatselt ja neid kasutatakse iga kord, kui PL/SQL-is väljastatakse Select-lause, kui selgesõnaliselt määratletud kursor puudub. Eksplitsiitsed kursorid, nagu nimigi viitab, on selgelt määratletud arendaja poolt. PL/SQL-is on eksplitsiitne kursor tegelikult nimega päring, mis on määratletud võtmesõna kursori abil.
Mis on kaudne kursor?
Kaudsed kursorid loob ja kasutab Oracle automaatselt iga kord, kui väljastatakse valitud väljavõte. Kui kasutatakse kaudset kursorit, teostab andmebaasihaldussüsteem (DBMS) avamise, toomise ja sulgemise toimingud automaatselt. Kaudseid kursoreid tuleks kasutada ainult SQL-lausetega, mis tagastavad ühe rea. Kui SQL-lause tagastab rohkem kui ühe rea, põhjustab kaudse kursori kasutamine vea. Kaudne kursor seotakse automaatselt iga DML (Data Manipulation Language) lausega, nimelt INSERT, UPDATE ja DELETE lausetega. Samuti kasutatakse SELECT INTO lausete töötlemiseks kaudset kursorit. Andmete toomisel kaudsete kursorite abil saab NO_DATA_FOUND erandi esile kutsuda, kui SQL-lause andmeid ei tagasta. Lisaks võivad kaudsed kursorid tekitada TOO_MANY_ROWS erandit, kui SQL-lause tagastab rohkem kui ühe rea.
Mis on selgesõnaline kursor?
Nagu varem mainitud, on selgesõnalised kursorid päringud, mis on määratletud nime abil. Selgesõnalist kursorit võib pidada kirjete kogumile osutava kursorina ja kursorit saab kirjete komplektis edasi liigutada. Selgesõnalised kursorid annavad kasutajale täieliku kontrolli andmete avamise, sulgemise ja toomise üle. Samuti saab selge kursori abil tuua mitu rida. Eksplitsiitsed kursorid võivad võtta parameetreid nagu iga funktsioon või protseduur, nii et kursori muutujaid saab muuta iga kord, kui see käivitatakse. Lisaks võimaldavad selgesõnalised kursorid tuua PL/SQL-kirje muutujasse terve rea. Eksplitsiitse kursori kasutamisel tuleb see kõigepe alt nime abil deklareerida. Kursori atribuutidele pääseb juurde kursorile antud nime kasutades. Pärast deklareerimist tuleb kõigepe alt kursor avada. Seejärel saab hankimist alustada. Kui tuua on vaja mitu rida, tuleb toomine teha tsükli sees. Lõpuks tuleb kursor sulgeda.
Erinevus selgesõnalise ja kaudse kursori vahel
Peamine erinevus kaudse kursori ja eksplitsiitse kursori vahel on see, et eksplitsiitne kursor tuleb selgelt määratleda, andes nime, samas kui kaudsed kursorid luuakse automaatselt, kui väljastate valitud avalduse. Lisaks saab selgesõnaliste kursorite abil tuua mitu rida, samas kui kaudsed kursorid saavad tuua ainult ühe rea. Ka erandeid NO_DATA_FOUND ja TOO_MANY_ROWS ei tõstata eksplitsiitsete kursorite kasutamisel, mitte kaudsetele kursoridele. Sisuliselt on kaudsed kursorid andmevigade suhtes haavatavamad ja pakuvad vähem programmilist juhtimist kui otsesed kursorid. Lisaks peetakse kaudseid kursoreid vähem tõhusaks kui eksplitsiitseid kursoreid.