Oracle
 sql >> Database >  >> RDS >> Oracle

Come creare PL/SQL SYS_REFCURSOR nel database Oracle

PL/SQL SYS_REFCURSOR nel database Oracle

Come abbiamo appreso nell'introduzione al cursore di riferimento, esistono tre tipi di cursore di riferimento PL/SQL in Oracle Database.

  1. Cursore di riferimento forte
  2. Cursore di riferimento debole e
  3. SYS_REFCURSOR

Finora in questa serie abbiamo trattato i concetti di cursore di riferimento forte e debole. L'unico tipo di cursore ancora intatto è PL/SQL SYS_REFCURSOR in Oracle Database. Che impareremo in questo blog.

Cos'è PL/SQL SYS_REFCURSOR?

SYS_REFCURSOR è un cursore di riferimento debole predefinito integrato nel software di database Oracle.

In che modo essere un cursore di riferimento predefinito ci aiuta?

SYS_REFCURSOR è un cursore di riferimento debole predefinito, il che significa che non dobbiamo definirlo nel nostro codice come abbiamo fatto con il cursore di riferimento debole esplicito nel tutorial precedente. Come abbiamo appreso in quel tutorial, la creazione di un cursore di riferimento debole è un processo in due fasi. Per prima cosa devi creare il "tipo di cursore di riferimento debole" e poi devi creare "una variabile cursore" usando quel cursore di riferimento.

Quando si utilizza SYS_REFCURSOR, è sufficiente creare una variabile cursore e nient'altro. SYS_REFCURSOR minimizza completamente il primo passaggio in cui crei il tipo di cursore di riferimento debole.

Quindi Sys_Refcursor è un cursore di riferimento integrato, dove possiamo trovarne la definizione?

Puoi trovare la definizione di PL/SQL SYS_REFCURSOR in uno script chiamato "stdspec.sql". Puoi individuare questo script nella directory il cui percorso è il seguente. 

%ORACLE_HOME% \RDBMS\ADMIN\stdspec.sql

La definizione di SYS_REFCURSOR sarà simile a questa:

Che tipo di cursore di riferimento è un SYS_REFCURSOR?

Come accennato in precedenza nella definizione, un SYS_REFCURSOR è un cursore di riferimento debole.

Ora che hai chiarito quasi tutti i dubbi su SYS_REFCURSOR. Voglio solo farti un'ultima domanda.

Informazioni:non c'è spazio tra REF e CURSOR. È una sola parola “RefCursor”.
Sbagliato:SYS_REF CURSOR
Corretto:SYS_REFCURSOR

Perché qualcuno dovrebbe dichiarare un cursore di riferimento debole quando ne abbiamo già uno predefinito?

Questa è in realtà un'ottima domanda. La risposta a questa domanda è No, non è necessario creare esplicitamente un cursore di riferimento debole. Oracle ha ridotto al minimo la necessità di creare un cursore di riferimento debole inviando SYS_REFCURSOR come parte del pacchetto standard da Oracle Database 9i sebbene l'opzione di crearne uno sia ancora disponibile.

È come una scelta personale, se qualcuno vuole creare un cursore di riferimento debole, allora può farlo. In caso contrario, hanno sempre SYS_REFCURSOR a loro disposizione. Il mio caro amico Steven Feuerstein ha pubblicato un ottimo post sul blog rispondendo a questa domanda che puoi leggere qui.

Vediamo un esempio molto semplice che dimostra come utilizzare un SYS_REFCURSOR PL/SQL in Oracle Database.

Esempio:come creare 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;
/

Puoi guardare il video tutorial sul canale YouTube per una spiegazione dettagliata del codice sopra.

Spero ti sia piaciuto leggere e imparato qualcosa di nuovo. Per favore, condividi questo blog sui tuoi social media con i tuoi amici. Grazie e buona giornata.