Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jak utworzyć PL/SQL SYS_REFCURSOR w bazie danych Oracle

PL/SQL SYS_REFCURSOR w bazie danych Oracle

Jak dowiedzieliśmy się we wstępie do kursora ref, w Oracle Database istnieją trzy typy kursora referencyjnego PL/SQL.

  1. Silny kursor referencyjny
  2. Słaby kursor odnośnika i
  3. SYS_REFCURSOR

Do tej pory w tej serii omówiliśmy koncepcje silnego i słabego kursora ref. Jedynym typem kursora, który wciąż pozostaje nietknięty, jest PL/SQL SYS_REFCURSOR w bazie danych Oracle. Czego dowiemy się na tym blogu.

Co to jest PL/SQL SYS_REFCURSOR?

SYS_REFCURSOR to predefiniowany kursor słabego odnośnika, który jest wbudowany w oprogramowanie bazy danych Oracle.

W jaki sposób pomoże nam bycie wstępnie zdefiniowanym kursorem referencyjnym?

SYS_REFCURSOR jest predefiniowanym kursorem słabego odnośnika, co oznacza, że ​​nie musimy definiować go w naszym kodzie, tak jak zrobiliśmy to z wyraźnym kursorem słabego odnośnika w poprzednim samouczku. Jak dowiedzieliśmy się w tym samouczku, tworzenie słabego kursora referencyjnego jest procesem dwuetapowym. Najpierw musisz utworzyć „słaby typ kursora referencyjnego”, a następnie musisz utworzyć „zmienną kursora” za pomocą tego kursora referencyjnego.

Używając SYS_REFCURSOR, wystarczy utworzyć zmienną kursora i nic więcej. SYS_REFCURSOR całkowicie minimalizuje pierwszy krok, w którym tworzysz typ kursora ze słabym odnośnikiem.

Więc Sys_Refcursor jest wbudowanym kursorem odnośnika, gdzie możemy znaleźć jego definicję?

Możesz znaleźć definicję PL/SQL SYS_REFCURSOR w skrypcie o nazwie „stdspec.sql”. Możesz zlokalizować ten skrypt w katalogu, którego ścieżka jest następująca. 

%ORACLE_HOME% \RDBMS\ADMIN\stdspec.sql

Definicja SYS_REFCURSOR będzie wyglądać mniej więcej tak:

Jakim typem kursora odniesienia jest SYS_REFCURSOR?

Jak wspomniano powyżej w definicji, SYS_REFCURSOR jest słabym kursorem odniesienia.

Teraz, gdy rozwiałeś prawie wszystkie wątpliwości dotyczące SYS_REFCURSOR. Chcę ci tylko zadać ostatnie pytanie.

Informacje:nie ma spacji między REF a CURSOR. Jest to jedno słowo „RefCursor”.
Źle:SYS_REF CURSOR
Poprawnie:SYS_REFCURSOR

Dlaczego ktoś miałby deklarować słaby kursor, skoro mamy już predefiniowany?

To właściwie bardzo dobre pytanie. Odpowiedź na to pytanie brzmi Nie, nie musimy wyraźnie tworzyć słabego kursora referencyjnego. Oracle zminimalizowało potrzebę tworzenia słabego kursora referencyjnego, dostarczając SYS_REFCURSOR jako część standardowego pakietu od Oracle Database 9i, chociaż opcja jego utworzenia jest nadal dostępna.

To jest jak osobisty wybór, jeśli ktoś chce stworzyć słaby kursor referencyjny, to może. Jeśli nie, to zawsze mają do dyspozycji SYS_REFCURSOR. Mój drogi przyjaciel Steven Feuerstein napisał bardzo dobry post na blogu, odpowiadając na to pytanie, które możesz przeczytać tutaj.

Zobaczmy bardzo prosty przykład pokazujący, jak używać PL/SQL SYS_REFCURSOR w Oracle Database.

Przykład:Jak utworzyć PL/SQL SYS_REFCURSOR w 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;
/

Możesz obejrzeć samouczek wideo na kanale YouTube, aby uzyskać szczegółowe wyjaśnienie powyższego kodu.

Mam nadzieję, że podobało Ci się czytanie i nauczyłeś się czegoś nowego. Udostępnij ten blog w swoich mediach społecznościowych znajomym. Dziękuję i życzę miłego dnia.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Statystyki tabeli GTT i SYS.WRI$_OPTSTAT_TAB_HISTORY

  2. ORACLE Jak używać szpuli z dynamiczną lokalizacją szpuli

  3. Funkcja CAST() w Oracle

  4. Nie daj się zwieść kałuży strumieni

  5. Odwołaj się do tabeli w innym schemacie, pomijając nazwę schematu