Wie man einen Cursor für REC in einer Schleife in Oracle

October 17

Wie man einen Cursor für REC in einer Schleife in Oracle

Oracle explizite Cursor--diejenigen, die Sie körperlich deklarieren müssen--lassen Sie die "einreihigen" Begrenzung der gemeinsamen SELECT-Anweisungen entfernen. Statt kopieren und speichern Spaltenwerte in SELECT-Anweisung Variablen eine Zeile zu einem Zeitpunkt, können explizite Cursor Sie eine Abfrage ausführen, eine Auflistung der Werte im Speicher zu speichern und zurück gehen und jeden Datensatz einzeln verarbeiten. Dies hat nicht nur reduziert die Verarbeitungszeit, sondern verringert auch die Menge an Code, den Sie schreiben müssen. Automatisieren Sie den Prozess und weiter zur Reduzierung von Codierung mit einem CURSOR für Rec Schleife über und mehrere Datenbankdatensätze abrufen.

Anweisungen

1 Erstellen Sie oder deklarieren Sie den Cursor als normal zu, indem sie einen eindeutigen Namen, binden an eine gemeinsame SELECT-Anweisung, und hängen Sie es dann an der Deklarationsabschnitt Ihrer Funktion oder Prozess. Die SELECT-Anweisung kann einfach oder komplexer, z. B. eine SELECT/WHERE/GROUPBY-Anweisung sein kann. Wenn Sie beispielsweise eine CURSOR für Freizeit-Schleife verwenden, um das aktuelle Monatsgehalt für jeden Ihrer Mitarbeiter zu holen und dann diese Beträge insgesamt möchten, wird die Deklarationsanweisung als angezeigt:

Erstellen Sie oder ersetzen Sie die Funktion SalaryExpense

( name_in IN varchar2 ) RETURN varchar2

IST

total_val number(6);

DECLARE Cursor Salary_cursor ist

select monthly_salary from employees where name = name_in;

BEGIN

(1 Seite 6, 7 und Referenz 2 Referenz)

2 Schreiben Sie eine Schleife-Anweisung, die automatisch öffnet den Cursor, greift jeder Mitarbeiterdatensatz, extrahiert die monatliche Gehaltsinformationen, Sie müssen Ihre monatliche Gehalt Kosten berechnen und eine laufende Summe jeder Wert hinzugefügt. Wenn die Schleife den letzten Datensatz erreicht, wird den Cursor automatisch geschlossen:

Total_monthy_salary: = 0;

FÜR Employee_rec in salary_cursorLOOPTotal_monthy_salary: = Total_monthy_salary + employee_rec.monthly_salary;END LOOP;

3 Zeigen Sie der Ergebnisse an und beenden Sie die Funktion oder den Prozess zu:

Rückkehr Total_monthy_salary;ENDE;