Come utilizzare un cursore per REC in un loop in Oracle

August 16

Come utilizzare un cursore per REC in un loop in Oracle


Oracle cursori espliciti - quelli che è necessario dichiarare fisicamente - consentono di rimuovere la limitazione "singola riga" di istruzioni SELECT comuni. Invece di copiare e memorizzare i valori delle colonne nelle variabili di istruzione selezionare una riga alla volta, i 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 è necessario scrivere. Automatizzare il processo e ridurre ulteriormente i requisiti di codifica utilizzando un cursore ciclo FOR rec per scorrere e recuperare più record del database.

istruzione

1 Creare o dichiarare il cursore come normale dandogli un nome univoco, legandolo ad un'istruzione SELECT comune e quindi aggiungere alla sezione di dichiarazione della funzione o del processo. L'istruzione SELECT può essere semplice o può essere più complessi, come ad esempio un SELECT / DOVE / dichiarazione GROUPBY. Se, per esempio, si desidera utilizzare un cursore ciclo FOR rec per andare a prendere lo stipendio mensile corrente per ciascuno dei vostri dipendenti e quindi totale questi importi, l'istruzione di dichiarazione viene visualizzato come:

CREARE O SOSTITUIRE SalaryExpense Funzione

( name_in IN varchar2 )
RETURN varchar2

È

total_val number(6);

DICHIARA salary_cursor cursore

select monthly_salary
from employees
where name = name_in;

INIZIO

(1-pagina 6, 7 e di riferimento 2)

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 mensile stipendio 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_cursor
CICLO CONTINUO
total_monthy_salary: = total_monthy_salary + employee_rec.monthly_salary;
END LOOP;

3 Visualizzare i risultati e terminare la funzione o processo:

RETURN total_monthy_salary;
FINE;