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

Cursore di riferimento forte PL/SQL con tipo di dati del record definito dall'utente

Cursore di riferimento forte con tipo di dati del record definito dall'utente

Nel tutorial precedente abbiamo imparato come creare un cursore di riferimento forte PL/SQL utilizzando la variabile del tipo di dati del record basata su tabella. Lì ho dimostrato l'uso di un forte cursore di riferimento per gestire i dati da tutte le colonne della tabella dipendenti. Di conseguenza, ciò solleva una preoccupazione. Cosa succede se vogliamo i dati da una colonna specifica della tabella? Questo è esattamente ciò di cui parleremo nel tutorial di oggi.

Tuttavia, prima di andare avanti in questo tutorial ti suggerisco di familiarizzare con la conoscenza dei cursori di riferimento PL/SQL. In particolare il cursore di riferimento forte e il tipo di dati del record definito dall'utente. Inoltre, per tua comodità, fornisco tutti i link necessari qui:

  • Come creare un forte cursore di riferimento utilizzando il record basato su tabelle
  • Cosa sono i tipi di dati di record definiti dall'utente?

Il tutorial precedente ha mostrato con successo come un cursore di riferimento PL/SQL Strong ha recuperato e gestito i dati da tutte le colonne di una riga. Ma cosa succede se vogliamo i dati da una specifica colonna di una riga? Diciamo che vogliamo solo vedere l'e-mail o lo stipendio di un dipendente. Di conseguenza, non vogliamo spendere le costose risorse per recuperare tutte le informazioni non necessarie. Quindi, possiamo usare lo stesso cursore di riferimento per quello? Scopriamolo.

Possiamo utilizzare il cursore di riferimento forte che abbiamo creato nel tutorial precedente per recuperare i dati da una colonna specifica?

La risposta a questa domanda è No, non possiamo .

Perché quel cursore di riferimento forte è stato creato utilizzando il tipo di dati del record basato su tabella. Per illustrare, quando creiamo un tipo di dati record basato su tabella, il motore Oracle crea una struttura di dati composita. Questa struttura è piena di campi corrispondenti a ciascuna colonna della tabella specificata.

Inoltre, a tutti questi campi vengono assegnati automaticamente lo stesso nome e lo stesso tipo di dati delle colonne della tabella di base. Ma quando si tratta di inizializzare un record utilizzando una colonna specifica, dobbiamo fare tutto questo lavoro manualmente.

Per capirlo più chiaramente, fare riferimento al tutorial 34 PL/SQL. Lì ho discusso in dettaglio come inizializzare il tipo di dati del record e il suo funzionamento.

Quindi, qual è la soluzione a questo problema?

Possiamo facilmente risolvere questo problema. Possiamo creare un cursore di riferimento forte PL/SQL con la variabile del tipo di dati del record definita dall'utente.

Esempio:cursore di riferimento forte PL/SQL con variabile del tipo di dati del record definita dall'utente.

Ad esempio, vogliamo creare un forte cursore di riferimento con l'istruzione SELECT. Che restituisce solo lo stipendio del dipendente il cui ID dipendente è 100.

SET SERVEROUTPUT ON;
DECLARE
	--Create User-Defined Record Datatype
    TYPE my_rec IS RECORD (
        emp_sal employees.salary%TYPE
        );
	--Declare Strong Ref Cursor
    TYPE RefCur IS REF CURSOR RETURN my_rec;
    cur_var REFCUR;
	--Another anchored datatype variable for holding data
    at_var  employees.salary%TYPE;
BEGIN
   OPEN cur_var FOR SELECT salary FROM employees WHERE employee_id = 100;
    FETCH cur_var INTO at_var;
    CLOSE cur_var;
    DBMS_OUTPUT.PUT_LINE ('Salary of the employee is '||at_var);
END;
/

Quindi, decidiamo di decifrare questo codice e vediamo cosa sta succedendo qui.

Sezione Dichiarazione

DECLARE
    TYPE my_rec IS RECORD (
        emp_sal employees.salary%TYPE
        );
    TYPE RefCur IS REF CURSOR RETURN my_rec;
    cur_var REFCUR;
    at_var  employees.salary%TYPE;

Ecco la nostra sezione dichiarazioni. Nelle prime tre righe di questa sezione abbiamo creato il nostro tipo di dati del record definito dall'utente con il nome my_rec. Inoltre, questo tipo di dati del record definito dall'utente ha un solo campo che è emp_sal. Emp_sal è un campo del tipo di dati ancorato progettato sulla colonna dello stipendio della tabella dei dipendenti. Poiché emp_sal è di tipo di dati ancorato, verrà automaticamente assegnato il tipo di dati e la larghezza dei dati della colonna di base che in questo caso è lo stipendio.

Subito dopo abbiamo dichiarato il nostro PL/SQL Strong Ref Cursor con il nome "RefCur". Il tipo di ritorno di questo forte cursore di riferimento è "my_rec" . Dopo la dichiarazione del cursore abbiamo creato una variabile cursore con il nome cur_var. Inoltre, questa variabile viene utilizzata per fare riferimento al cursore di riferimento forte davanti al codice.

Oltre alla variabile cursore abbiamo anche un'altra variabile dichiarata in questa sezione. Questa variabile è "at_var", questa è di nuovo una variabile di tipo di dati ancorata. Viene utilizzato per memorizzare i dati restituiti dal cursore.

Veniamo ora alla sezione di esecuzione.

Sezione di esecuzione

BEGIN
    OPEN cur_var FOR SELECT salary FROM employees WHERE employee_id = 100;
    FETCH cur_var INTO at_var;
    CLOSE cur_var;
    DBMS_OUTPUT.PUT_LINE('Salary of the employee is '||at_var);
END;
/

Questa sezione di esecuzione ha quattro righe di codice eseguibili. Vediamo quali sono.

Riga 1:Aperta per la dichiarazione

Questa istruzione Apre dinamicamente il cursore menzionato. Successivamente allega l'istruzione SELECT specificata subito dopo la parola chiave FOR.

Nel nostro caso questa istruzione sta aprendo il cursore di riferimento forte utilizzando la variabile del cursore "cur_var" - un'istruzione SELECT. Che restituisce i dati solo dalla "colonna salariale" della tabella dipendenti.

Riga 2:istruzione di recupero

Questa istruzione preleverà i dati dal cursore di riferimento e li memorizzerà nella variabile "at_var". Altrettanto importante è assicurarsi che il tipo di dati dei dati recuperati e quello della variabile in cui i dati vengono archiviati debbano corrispondere. In caso contrario si verificherà un errore.

Riga 3:dichiarazione di chiusura

La terza riga è una dichiarazione di chiusura. Chiudere un cursore che hai finito è una buona pratica.

Riga 4:dichiarazione di output

Infine, l'ultima istruzione della sezione di esecuzione è l'istruzione DBMS_OUTPUT. E mostra all'utente lo stipendio del dipendente.

Queste quattro righe completano la sezione di esecuzione di questo blocco PL/SQL. Inoltre la corretta esecuzione di questo codice dovrebbe mostrarti lo stipendio con la stringa formattata.

Uno di quelli che impara meglio guardando i video? Quindi ecco il video tutorial sul cursore di riferimento forte con il tipo di dati del record definito dall'utente.

Questo è tutto per questo tutorial. Assicurati di condividere questo blog sui tuoi social media e aiuta gli altri a imparare. Puoi iscriverti al canale YouTube per tutorial più interessanti. Grazie e buona giornata!