Eksempler på PLSQL-markører - eksplicitte, implicitte og referencemarkører
En markør fungerer logisk som en peger ind i et resultat sæt. Du kan flytte markøren gennem resultatsættet, behandle hver række, indtil du finder ud af, at du er ved slutningen af resultatsættet. Der er tre typer syntaks forbundet med markører:oprettelse af markøren, hentning med markøren og lukning af markøren. Derudover er der en række attributter for en markør, du kan bruge i dine logiske sammenligninger. Følgende er typerne af markører i Oracle:
Eksplicitte markører
Eksplicitte markører er markører, som du erklærer og bruger.
Implicitte markører
PL/SQL giver dig mulighed for at inkludere SQL-sætninger, inklusive SELECT-sætninger, som en del af din kode uden at erklære en cursor, der kaldes en implicit cursor.
Ref markører
En markør refererer til et resultatsæt. REF CURSOR giver dig mulighed for at overføre en markørreference fra en PL/SQL-programenhed til en anden. Med andre ord giver det dig mulighed for at oprette en variabel, der vil modtage en markør og give adgang til dens resultatsæt, men i denne blog giver jeg eksempler kun for eksplicitte og implicitte markører, jeg vil give eksempler for referencemarkører og Dynamisk markør i en anden blog .Et eksempel på eksplicit markør:DECLARE nemployeeid NUMBER; dstartdato DATO; denddate DATO; sjobid VARCHAR2 (20); -- erklær cursor CURSOR curjob ER SELECT medarbejder_id, start_date, end_date, job_id FRA hr.job_history;BEGIN OPEN curjob; LOOP FETCH curjob INTO nemployeeid, dstartdate, denddate, sjobid; AFSLUT NÅR curjob%NOTFOUND; DBMS_OUTPUT.put_line( 'Medarbejder ' || nemployeeid || 'havde job ' || sjobid || ' for ' || (denddate - dstartdate) || ' dage.'); ENDSLØKKE; CLOSE curjob;END;/Samme eksempel er givet nedenfor for eksplicit markør, men med For Loop er For Loop-markørerne mere smarte, da der ikke er behov for at deklarere variabler for at hente værdier i dem, og ingen grund til at åbne eller lukke eller kontrollere, om markøren er i slutningen af markøren. Her er eksemplet:DECLARE CURSOR curjob IS SELECT ansat_id, start_date, end_date, job_id FROM hr.job_history;BEGIN FOR jh_rec IN curjob LOOP DBMS_OUTPUT.put_line( ''Medarbejder ' || jh_rec.employee_id ||| ' havde job 'rec ||| .job_id || ' for ' || ( jh_rec.end_date - jh_rec.start_date || ' dage.')); END LOOP;END;/An implicit markør eksempel:DECLARE nempno NUMBER; CURSOR curjob ER SELECT ansat_id, start_date, end_date, job_id FROM hr.job_history;BEGIN -- under sql-forespørgsel er typen af implicit markør SELECT COUNT ( * ) INTO nempno FROM hr.job_history; DBMS_OUTPUT.put_line ( 'Der er ' || nempno || ' medarbejderhistorik.'); FOR jh_rec IN curjob LOOP DBMS_OUTPUT.put_line( ''Medarbejder ' || jh_rec.employee_id || ' havde job ' || jh_rec.job_id || ' for ' || ( jh_rec.end_date - jh_rec.start_date || ' dage. )); END LOOP;END;/