sql >> Database >  >> RDS >> Oracle

Hoe PL/SQL SYS_REFCURSOR in Oracle Database aan te maken?

PL/SQL SYS_REFCURSOR in Oracle-database

Zoals we in de inleiding tot de ref-cursor hebben geleerd dat er drie soorten PL/SQL-ref-cursors zijn in Oracle Database.

  1. Sterke ref-cursor
  2. Zwakke ref-cursor en
  3. SYS_REFCURSOR

Tot nu toe hebben we in deze serie de concepten van zowel de sterke als de zwakke ref-cursor behandeld. Het enige type cursor dat nog onaangeroerd is, is PL/SQL SYS_REFCURSOR in Oracle Database. Wat we in deze blog zullen leren.

Wat is PL/SQL SYS_REFCURSOR?

SYS_REFCURSOR is een vooraf gedefinieerde zwakke ref-cursor die is ingebouwd in de Oracle-databasesoftware.

Hoe helpt het om een ​​vooraf gedefinieerde ref-cursor te zijn?

SYS_REFCURSOR is een vooraf gedefinieerde zwakke ref-cursor, wat betekent dat we het niet in onze code hoeven te definiëren zoals we deden met de expliciete zwakke ref-cursor in de vorige tutorial. Zoals we in die tutorial hebben geleerd, is het maken van een zwakke ref-cursor een proces in twee stappen. Eerst moet je het "zwakke ref-cursortype" maken en vervolgens moet je "een cursorvariabele" maken met die ref-cursor.

Wanneer u SYS_REFCURSOR gebruikt, hoeft u alleen een cursorvariabele te maken en niets anders. SYS_REFCURSOR minimaliseert volledig de eerste stap waar u het zwakke ref-cursortype aanmaakt.

Dus Sys_Refcursor is een ingebouwde ref-cursor, waar kunnen we de definitie ervan vinden?

U kunt de definitie van PL/SQL SYS_REFCURSOR vinden in een script met de naam "stdspec.sql". U kunt dit script vinden in de map waarvan het pad als volgt is. 

%ORACLE_HOME% \RDBMS\ADMIN\stdspec.sql

SYS_REFCURSOR-definitie ziet er ongeveer zo uit:

Welk type Ref Cursor is een SYS_REFCURSOR?

Zoals hierboven vermeld in de definitie is een SYS_REFCURSOR een Weak Ref Cursor.

Nu je bijna alle twijfels over SYS_REFCURSOR hebt weggenomen. Ik wil je nog een laatste vraag stellen.

Info:er is geen spatie tussen REF en CURSOR. Het is een enkel woord "RefCursor".
Fout:SYS_REF CURSOR
Correct:SYS_REFCURSOR

Waarom zou iemand een zwakke ref-cursor declareren als we al een vooraf gedefinieerde hebben?

Dat is eigenlijk een heel goede vraag. Het antwoord op deze vraag is Nee, we hoeven niet expliciet een zwakke ref-cursor aan te maken. Oracle minimaliseerde de noodzaak van het maken van een zwakke ref-cursor door SYS_REFCURSOR te verzenden als onderdeel van het standaardpakket sinds Oracle Database 9i, hoewel de optie om er een te maken nog steeds beschikbaar is.

Het is als een persoonlijke keuze, als iemand een zwakke ref-cursor wil maken, dan kan dat. Zo niet, dan hebben ze altijd SYS_REFCURSOR tot hun beschikking. Mijn goede vriend Steven Feuerstein heeft een zeer goede blogpost geschreven waarin hij deze vraag beantwoordde, die je hier kunt lezen.

Laten we een heel eenvoudig voorbeeld bekijken dat laat zien hoe u een PL/SQL SYS_REFCURSOR in Oracle Database gebruikt.

Voorbeeld:hoe maak ik PL/SQL SYS_REFCURSOR in 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;
/

Je kunt de video-tutorial op het YouTube-kanaal bekijken voor een gedetailleerde uitleg van de bovenstaande code.

Ik hoop dat je het leuk vond om te lezen en iets nieuws hebt geleerd. Deel deze blog op je sociale media met je vrienden. Bedankt en een fijne dag verder.


  1. SQL Server REPLACE() vs TRANSLATE():wat zijn de verschillen?

  2. Top 5 voordelen van migreren naar Azure SQL Database

  3. Top 10 methoden om ETL-prestaties te verbeteren met behulp van SSIS

  4. Is ODP.NET vereist voor Oracle 11g Client?