Oracle cursori espliciti - quelli devi fisicamente dichiarare - consentono di rimuovere la "riga unica " limitazione delle istruzioni SELECT comuni . Invece di copiare e memorizzare i valori delle colonne nelle variabili istruzione SELECT di una riga alla volta , cursori espliciti consentono di eseguire una query , memorizza un insieme di valori in memoria e tornare indietro ed elaborare ogni record singolarmente . Questo non solo riduce il tempo di elaborazione , ma riduce anche la quantità di codice che dovete scrivere . Automatizzare il processo e ridurre ulteriormente i requisiti di codifica utilizzando un cursore FOR rec ciclo per scorrere e recuperare più record del database . Istruzioni
1
Creare o dichiarare il cursore come normale dandogli un nome univoco , legandola a un'istruzione SELECT comune e poi aggiungerlo alla sezione di dichiarazione della funzione o del processo . L'istruzione SELECT può essere semplice o può essere più complessa , come ad esempio una SELECT /WHERE /GroupBy . Se, ad esempio , si desidera utilizzare un cursore loop FOR rec per andare a prendere l'attuale stipendio mensile per ciascuno dei vostri dipendenti e quindi totale questi importi , la dichiarazione dichiarazione viene visualizzato come :
creare o sostituire Funzione SalaryExpense ( name_in IN vARCHAR2 ) RETURN numero varchar2IStotal_val ( 6) ;
DICHIARARE il cursore salary_cursor isselect monthly_salaryfrom nome employeeswhere = name_in ;
BEGIN
( Riferimento 1 , pagina 6 , 7 e di riferimento 2 ) economici 2
scrivere una dichiarazione di loop che si apre automaticamente il cursore , accede a ogni record dipendente , estrae le informazioni stipendio mensile è necessario calcolare la vostra spesa stipendio mensile e aggiunge ogni valore per un totale parziale . Quando il ciclo raggiunge l' ultimo record , chiude automaticamente il cursore :
total_monthy_salary : = 0 ;
PER employee_rec in salary_cursorLOOPtotal_monthy_salary : = total_monthy_salary + employee_rec.monthly_salary ; END LOOP ;
3
visualizzare i risultati e terminare la funzione o processo :
RITORNO total_monthy_salary ; END;