sql >> Databasteknik >  >> RDS >> Oracle

Hur man skapar PL/SQL SYS_REFCURSOR i Oracle Database

PL/SQL SYS_REFCURSOR i Oracle Database

Som vi lärde oss i introduktionen till ref markören att det finns tre typer av PL/SQL ref markör i Oracle Database.

  1. Stark referensmarkör
  2. Svag ref-markör och
  3. SYS_REFCURSOR

Hittills i den här serien har vi täckt begreppen stark såväl som svag ref-markör. Den enda typen av markör som fortfarande är orörd är PL/SQL SYS_REFCURSOR i Oracle Database. Vilket vi kommer att lära oss i den här bloggen.

Vad är PL/SQL SYS_REFCURSOR?

SYS_REFCURSOR är en fördefinierad svag ref-markör som är inbyggd i Oracles databasprogramvara.

Hur hjälper det oss att vara en fördefinierad referensmarkör?

SYS_REFCURSOR är en fördefinierad svag ref-markör vilket betyder att vi inte behöver definiera den i vår kod som vi gjorde med den explicita svaga ref-markören i föregående handledning. Som vi lärde oss i den handledningen att skapa en svag ref-markör är en process i två steg. Först måste du skapa "svag ref-markörtyp" och sedan måste du skapa "en markörvariabel" med den ref-markören.

När du använder SYS_REFCURSOR behöver du bara skapa en markörvariabel och inget annat. SYS_REFCURSOR minimerar helt det första steget där du skapar den svaga ref-markörtypen.

Så Sys_Refcursor är en inbyggd ref-markör, var kan vi hitta dess definition?

Du kan ta reda på definitionen av PL/SQL SYS_REFCURSOR i ett skript som heter "stdspec.sql". Du kan hitta det här skriptet i katalogen vars sökväg är som följer. 

%ORACLE_HOME% \RDBMS\ADMIN\stdspec.sql

SYS_REFCURSOR definition kommer att se ut ungefär så här:

Vilken typ av referensmarkör är en SYS_REFCURSOR?

Som nämnts ovan i definitionen är en SYS_REFCURSOR en svag referensmarkör.

Nu när du har tagit bort nästan alla tvivel om SYS_REFCURSOR. Jag vill bara ställa en sista fråga till dig.

Info:Det finns inget mellanslag mellan REF och CURSOR. Det är ett enda ord "RefCursor".
Fel:SYS_REF CURSOR
Rätt:SYS_REFCURSOR

Varför skulle någon deklarera en svag ref-markör när vi redan har en fördefinierad?

Det är faktiskt en väldigt bra fråga. Svaret på denna fråga är Nej, vi behöver inte skapa en svag ref-markör uttryckligen. Oracle minimerade behovet av att skapa en svag ref-markör genom att skicka SYS_REFCURSOR som en del av standardpaketet sedan Oracle Database 9i, även om alternativet att skapa en fortfarande är tillgängligt.

Det är som ett personligt val, om någon vill skapa en svag ref-markör så kan de. Om inte, så har de alltid SYS_REFCURSOR till sitt förfogande. Min kära vän Steven Feuerstein gjorde ett mycket bra blogginlägg som besvarade denna fråga som du kan läsa här.

Låt oss se ett mycket enkelt exempel som visar hur man använder en PL/SQL SYS_REFCURSOR i Oracle Database.

Exempel:Hur skapar man PL/SQL SYS_REFCURSOR i Oracle Database?

SET SERVEROUTPUT ON;
DECLARE
    --Declare cursor variable of SYS_REFCURSOR type
    cur_var SYS_REFCURSOR;
    
    --Declare variables for holding data
    f_name  employees.first_name%TYPE;
    emp_sal employees.salary%TYPE;
BEGIN
OPEN cur_var FOR SELECT first_name, Salary FROM employees WHERE employee_id = 100;
    FETCH cur_var INTO f_name, emp_sal;
    CLOSE cur_var;
    DBMS_OUTPUT.PUT_LINE(f_name ||' '||emp_sal);
END;
/

Du kan titta på videohandledningen på YouTube-kanalen för en detaljerad förklaring av koden ovan.

Hoppas du tyckte om att läsa och lärde dig något nytt. Dela gärna den här bloggen på dina sociala medier med dina vänner. Tack och ha en bra dag.


  1. Hur man skapar användare i Oracle Multitenant 12c utan C## prefix

  2. Neo4j - Välja data med MATCH med Cypher

  3. Hur man får tillbaka *allt* från en lagrad procedur med JDBC

  4. Hur man kontrollerar om PostgreSQL-arrayen innehåller värde