Exempel på PLSQL-markörer - explicita, implicita och referensmarkörer
En markör fungerar logiskt som en pekare till ett resultat uppsättning. Du kan flytta markören genom resultatuppsättningen, bearbeta varje rad, tills du avgör att du är i slutet av resultatuppsättningen. Det finns tre typer av syntax associerade med markörer:skapa markören, hämta med markören och stänga markören. Dessutom finns det ett antal attribut för en markör som du kan använda i dina logiska jämförelser. Följande är typerna av markörer i Oracle:
Explicita markörer
Explicita markörer är markörer som du deklarerar och använder.
Implicita markörer
PL/SQL låter dig inkludera SQL-satser, inklusive SELECT-satser, som en del av din kod utan att deklarera en markör, som kallas en implicit markör.
Ref markörer
En markör refererar till en resultatuppsättning. REF CURSOR låter dig skicka en markörreferens från en PL/SQL-programenhet till en annan. Med andra ord, det låter dig skapa en variabel som kommer att ta emot en markör och möjliggöra åtkomst till dess resultatuppsättning, men i den här bloggen ger jag exempel för endast explicita och implicita markörer, jag kommer att ge exempel för referensmarkörer och Dynamisk markör i en annan blogg .Ett exempel på Explicit Cursor:DECLARE nemployeeid NUMBER; dstartdatum DATUM; denddat DATUM; sjobid VARCHAR2 (20); -- deklarera markören CURSOR curjob ÄR SELECT anställd_id, start_date, end_date, job_id FROM hr.job_history;BEGIN ÖPPNA curjob; LOOP FETCH curjob INTO nemployeeid, dstartdate, denddate, sjobid; AVSLUTA NÄR curjob%NOTFOUND; DBMS_OUTPUT.put_line( 'Anställd ' || nemployeeid || 'hade jobb ' || sjobid || ' för ' || (denddate - dstartdate) || ' dagar.'); END LOOP; CLOSE curjob;END;/Samma exempel ges nedan för explicit markör men med For Loop är For Loop-markörerna smartare eftersom det inte finns något behov av att deklarera variabler för att hämta värden i dem och inget behov av att öppna eller stänga eller kontrollera om pekaren är i slutet av markören. Här är exemplet:DECLARE CURSOR curjob IS SELECT anställd_id, start_date, end_date, job_id FRÅN hr.job_history; BÖRJA FÖR jh_rec IN curjob LOOP DBMS_OUTPUT.put_line( ''Anställd ' || jh_rec.employee_id ||| ' hade jobb ' || .job_id || ' för ' || ( jh_rec.end_date - jh_rec.start_date || ' dagar.')); END LOOP;END;/An implicit markörexempel:DECLARE nempno NUMBER; CURSOR curjob ÄR SELECT anställd_id, start_date, end_date, job_id FROM hr.job_history;BEGIN -- nedan sql-fråga är typen av implicit markör SELECT COUNT ( * ) INTO nempno FROM hr.job_history; DBMS_OUTPUT.put_line ( 'Det finns ' || nempno || ' anställds historikposter.'); FÖR jh_rec IN curjob LOOP DBMS_OUTPUT.put_line( ''Anställd ' || jh_rec.employee_id || ' hade jobb ' || jh_rec.job_id || ' för ' || ( jh_rec.end_date - jh_rec.start_date || ' dagar. )); END LOOP;END;/