Heim >Datenbank >MySQL-Tutorial >Wie gebe ich mehrere Ergebnismengen aus einer gespeicherten Oracle PL/SQL-Prozedur zurück?

Wie gebe ich mehrere Ergebnismengen aus einer gespeicherten Oracle PL/SQL-Prozedur zurück?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-29 04:40:09165Durchsuche

How to Return Multiple Result Sets from an Oracle PL/SQL Stored Procedure?

Mehrere Ergebnismengen mit gespeicherten Oracle PL/SQL-Prozeduren zurückgeben

Frage:

Wie können wir eine gespeicherte Prozedur erstellen? das verschiedene Datensätze basierend auf einem übergebenen Argument abruft und diese anschließend im Klartext aufruft SQL?

Antwort:

Um mehrere Ergebnismengen aus einer gespeicherten Oracle PL/SQL-Prozedur zurückzugeben, können wir den folgenden Ansatz verwenden:

  1. Objekt- und Tabellentypen erstellen:

    Zuerst definieren wir Objekt- und Tabellentypen, um die Datenstruktur unseres Ergebnisses darzustellen Sätze. In diesem Beispiel erstellen wir einen emp_obj-Objekttyp mit zwei Attributen: empno (Nummer) und ename (varchar2). Anschließend erstellen wir einen emp_tab-Tabellentyp als Sammlung von emp_obj-Objekten.

  2. Erstellen Sie die gespeicherte Prozedur:

    Wir definieren eine Funktion (all_emps in in diesem Fall), der eine emp_tab-Sammlung zurückgibt. Innerhalb der Funktion:

    • Initialisieren Sie eine leere emp_tab-Variable.
    • Führen Sie eine Schleife aus, um die gewünschten Zeilen zu durchlaufen (in diesem Beispiel das Abrufen von empno und ename aus der emp-Tabelle).
    • Erweitern Sie die emp_tab-Sammlung und weisen Sie die Werte jeder Zeile einem emp_obj zu Instanz.
    • Gibt die ausgefüllte emp_tab-Sammlung zurück.
  3. Rufen Sie die gespeicherte Prozedur aus SQL auf:

    Aufrufen Für die all_emps-Funktion von SQL verwenden wir den Tabellenoperator. Dadurch können wir die zurückgegebene Sammlung als reguläre Tabelle abfragen.

Beispiel:

SQL> create type emp_obj is object (empno number, ename varchar2(10));

SQL> create type emp_tab is table of emp_obj;

SQL> create or replace function all_emps return emp_tab
is
    l_emp_tab emp_tab := emp_tab();
    n integer := 0;
begin
    for r in (select empno, ename from emp)
    loop
        l_emp_tab.extend;
        n := n + 1;
        l_emp_tab(n) := emp_obj(r.empno, r.ename);
    end loop;
    return l_emp_tab;
end;

SQL> select * from table (all_emps);

Ergebnis:

     EMPNO ENAME
---------- ----------
      7369 SMITH
      7499 ALLEN
      7521 WARD
      7566 JONES
      7654 MARTIN
      7698 BLAKE
      7782 CLARK
      7788 SCOTT
      7839 KING
      7844 TURNER
      7902 FORD
      7934 MILLER

Das obige ist der detaillierte Inhalt vonWie gebe ich mehrere Ergebnismengen aus einer gespeicherten Oracle PL/SQL-Prozedur zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn