Eksplicit markør vs. implicit markør
Når det kommer til databaser, er en markør en kontrolstruktur, der gør det muligt at krydse posterne i en database. En markør giver en mekanisme til at tildele et navn til en SQL select-sætning, og den kan derefter bruges til at manipulere informationen i den SQL-sætning. Implicitte markører oprettes og bruges automatisk, hver gang en Select-sætning udsendes i PL/SQL, når der ikke er nogen eksplicit defineret markør. Eksplicitte markører, som navnet antyder, defineres eksplicit af udvikleren. I PL/SQL er en eksplicit markør faktisk en navngivet forespørgsel defineret ved hjælp af nøgleordsmarkøren.
Hvad er implicit markør?
Implicitte markører oprettes og bruges automatisk af Oracle, hver gang der udsendes en select-erklæring. Hvis der bruges en implicit markør, vil Database Management System (DBMS) udføre åbning, hentning og lukning automatisk. Implicitte markører bør kun bruges med SQL-sætninger, der returnerer en enkelt række. Hvis SQL-sætningen returnerer mere end én række, vil brug af en implicit markør introducere en fejl. En implicit markør er automatisk knyttet til hver Data Manipulation Language (DML)-sætning, nemlig INSERT-, UPDATE- og DELETE-sætninger. Desuden bruges en implicit markør til at behandle SELECT INTO-sætninger. Når data hentes ved hjælp af implicitte markører, kan NO_DATA_FOUND-undtagelsen hæves, når SQL-sætningen ikke returnerer nogen data. Ydermere kan implicitte markører hæve TOO_MANY_ROWS undtagelser, når SQL-sætningen returnerer mere end én række.
Hvad er eksplicit markør?
Som tidligere nævnt er eksplicitte markører forespørgsler defineret ved hjælp af et navn. En eksplicit markør kan opfattes som en markør til et sæt poster, og markøren kan flyttes fremad inden for sættet af poster. Eksplicitte markører giver brugeren fuld kontrol over åbning, lukning og hentning af data. Desuden kan flere rækker hentes ved hjælp af en eksplicit markør. Eksplicitte markører kan også tage parametre ligesom enhver funktion eller procedure, så variablerne i markøren kan ændres, hver gang den udføres. Derudover giver eksplicitte markører dig mulighed for at hente en hel række ind i en PL/SQL-postvariabel. Når du bruger en eksplicit markør, skal den først erklæres med et navn. Markørattributter kan tilgås ved at bruge det navn, som markøren har fået. Efter deklarering skal markøren først åbnes. Så kan hentning startes. Hvis flere rækker skal hentes, skal hentehandlingen udføres inde i en løkke. Til sidst skal markøren lukkes.
Forskellen mellem eksplicit markør og implicit markør
Den største forskel mellem den implicitte markør og den eksplicitte markør er, at en eksplicit markør skal defineres eksplicit ved at angive et navn, mens implicitte markører automatisk oprettes, når du udsteder en select-sætning. Desuden kan flere rækker hentes ved hjælp af eksplicitte markører, mens implicitte markører kun kan hente en enkelt række. Også NO_DATA_FOUND og TOO_MANY_ROWS undtagelser hæves ikke, når der bruges eksplicitte markører, i modsætning til implicitte markører. I bund og grund er implicitte markører mere sårbare over for datafejl og giver mindre programmatisk kontrol end eksplicitte markører. Desuden anses implicitte markører for at være mindre effektive end eksplicitte markører.