Starker Ref-Cursor mit benutzerdefiniertem Datensatzdatentyp
Im vorherigen Tutorial haben wir gelernt, wie man einen PL/SQL-Strong-Ref-Cursor mit einer tabellenbasierten Datensatz-Datentypvariablen erstellt. Dort habe ich die Verwendung des Strong-Ref-Cursors demonstriert, um die Daten aus allen Spalten der Employees-Tabelle zu verarbeiten. Folglich gibt dies Anlass zur Sorge. Was ist, wenn wir die Daten aus einer bestimmten Spalte der Tabelle wollen? Genau das werden wir im heutigen Tutorial ansprechen.
Bevor Sie jedoch mit diesem Tutorial fortfahren, empfehle ich Ihnen, sich mit dem Wissen über PL/SQL-Ref-Cursor vertraut zu machen. Insbesondere der Strong Ref-Cursor und der benutzerdefinierte Datensatzdatentyp. Außerdem stelle ich Ihnen hier alle notwendigen Links zur Verfügung:
- Erstellung eines starken Ref-Cursors mit tabellenbasiertem Datensatz
- Was sind benutzerdefinierte Datensatzdatentypen?
Das vorherige Tutorial hat erfolgreich gezeigt, wie ein PL/SQL-Strong-Ref-Cursor Daten aus allen Spalten einer Zeile abgerufen und verarbeitet hat. Aber was ist, wenn wir die Daten aus einer bestimmten Spalte einer Zeile wollen? Nehmen wir an, wir wollen nur die E-Mail oder das Gehalt eines Mitarbeiters sehen. Folglich möchten wir nicht die teuren Ressourcen aufwenden, um alle unnötigen Informationen abzurufen. Können wir dafür denselben Ref-Cursor verwenden? Finden wir es heraus.
Können wir den im vorherigen Tutorial erstellten Strong Ref-Cursor verwenden, um Daten aus einer bestimmten Spalte abzurufen?
Die Antwort auf diese Frage lautet Nein, können wir nicht .
Weil dieser Strong Ref-Cursor mit dem tabellenbasierten Datensatzdatentyp erstellt wurde. Zur Veranschaulichung:Wenn wir einen tabellenbasierten Datensatzdatentyp erstellen, erstellt die Oracle-Engine eine zusammengesetzte Datenstruktur. Diese Struktur ist vollgestopft mit Feldern, die jeder Spalte der angegebenen Tabelle entsprechen.
Außerdem werden all diesen Feldern automatisch der gleiche Name und der gleiche Datentyp wie den Spalten der Basistabelle zugewiesen. Aber wenn es darum geht, einen Datensatz mit einer bestimmten Spalte zu initialisieren, müssen wir diese ganze Arbeit manuell erledigen.
Um es klarer zu verstehen, lesen Sie bitte das PL/SQL-Tutorial 34. Dort habe ich ausführlich besprochen, wie Datensatzdatentypen initialisiert werden und wie sie funktionieren.
Also, was ist die Lösung für dieses Problem?
Wir können dieses Problem leicht lösen. Wir können einen PL/SQL-Strong-Ref-Cursor mit einer benutzerdefinierten Datensatzdatentyp-Variablen erstellen.
Beispiel:PL/SQL-Strong-Ref-Cursor mit benutzerdefinierter Datensatzdatentyp-Variable.
Beispielsweise möchten wir mit der SELECT-Anweisung einen starken Verweis-Cursor erstellen. Gibt nur das Gehalt des Mitarbeiters zurück, dessen Mitarbeiter-ID 100 ist.
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; /
Lassen Sie uns also diesen Code brechen und sehen, was hier passiert.
Erklärungsabschnitt
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;
Hier ist unser Deklarationsabschnitt. In den ersten drei Zeilen dieses Abschnitts haben wir unseren benutzerdefinierten Datensatzdatentyp mit dem Namen my_rec erstellt. Außerdem hat dieser benutzerdefinierte Datensatzdatentyp nur ein Feld, nämlich emp_sal. Emp_sal ist ein verankertes Datentypfeld, das über der Gehaltsspalte der Angestelltentabelle entworfen ist. Da emp_sal ein verankerter Datentyp ist, wird ihm automatisch der Datentyp und die Datenbreite der Basisspalte zugewiesen, die in diesem Fall das Gehalt ist.
Gleich danach haben wir unseren PL/SQL Strong Ref Cursor mit dem Namen „RefCur“ deklariert. Der Rückgabetyp dieses Strong-Ref-Cursors ist „my_rec“ . Gefolgt von der Cursor-Deklaration haben wir eine Cursor-Variable mit dem Namen cur_var erstellt. Zusätzlich wird diese Variable verwendet, um auf den Strong-Ref-Cursor voraus im Code zu verweisen.
Neben der Cursor-Variablen haben wir in diesem Abschnitt noch eine weitere Variable deklariert. Diese Variable ist „at_var“, dies ist wieder eine verankerte Datentypvariable. Es wird zum Speichern der vom Cursor zurückgegebenen Daten verwendet.
Kommen wir nun zum Exekutionsabschnitt.
Ausführungsabschnitt
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; /
Dieser Ausführungsabschnitt hat vier ausführbare Codezeilen. Mal sehen, welche das sind.
Zeile 1:Open For-Anweisung
Diese Anweisung öffnet dynamisch den erwähnten Cursor. Danach hängt es die SELECT-Anweisung an, die direkt nach dem FOR-Schlüsselwort angegeben ist.
In unserem Fall öffnet diese Anweisung den Strong-Ref-Cursor mit der Cursor-Variablen „cur_var“ – eine SELECT-Anweisung. Dadurch werden die Daten nur aus der „Gehaltsspalte“ der Mitarbeitertabelle zurückgegeben.
Zeile 2:Fetch-Anweisung
Diese Anweisung holt die Daten aus dem Ref-Cursor und speichert sie in der Variablen „at_var“. Ebenso wichtig ist es sicherzustellen, dass der Datentyp der abgerufenen Daten und der Variable, in der die Daten gespeichert werden, übereinstimmen müssen. Andernfalls tritt ein Fehler auf.
Zeile 3:Anweisung schließen
Die dritte Zeile ist eine enge Aussage. Es empfiehlt sich, einen Cursor zu schließen, wenn Sie fertig sind.
Zeile 4:Ausgabeanweisung
Schließlich ist die letzte Anweisung des Ausführungsabschnitts die DBMS_OUTPUT-Anweisung. Und es zeigt dem Benutzer das Gehalt des Mitarbeiters an.
Diese vier Zeilen vervollständigen den Ausführungsabschnitt dieses PL/SQL-Blocks. Außerdem sollte Ihnen die erfolgreiche Ausführung dieses Codes das Gehalt mit dem formatierten String anzeigen.
Gehören Sie zu denen, die durch das Ansehen von Videos besser lernen? Dann ist hier das Video-Tutorial zum Strong-Ref-Cursor mit benutzerdefiniertem Datensatzdatentyp.
Das war es für dieses Tutorial. Stellen Sie sicher, dass Sie diesen Blog in Ihren sozialen Medien teilen und anderen beim Lernen helfen. Sie können den YouTube-Kanal für weitere interessante Tutorials abonnieren. Vielen Dank und einen schönen Tag!