Kann eine Oracle SQL-Prozedur eine Tabelle zurückgeben? Ich benutze derzeit eine dbms_output
, um die Ausgaben von zwei Cursors, die in einer Schleife sind, auszudrucken, obwohl dies schöner aussehen würde, wenn es stattdessen zwei Spalten zurückgeben würde. Wäre das in einem Verfahren möglich?Kann eine SQL-Prozedur eine Tabelle zurückgeben?
6
A
Antwort
8
Eine PL/SQL-Funktion kann eine verschachtelte Tabelle zurückgeben. Vorausgesetzt, dass wir die geschachtelte Tabelle als SQL-Typ deklarieren, können wir sie als Quelle einer Abfrage verwenden, indem wir the TABLE() function verwenden. Hier
ist ein Typ und eine verschachtelte Tabelle aus gebaut:
SQL> create or replace type emp_dets as object (
2 empno number,
3 ename varchar2(30),
4 job varchar2(20));
5/
Type created.
SQL> create or replace type emp_dets_nt as table of emp_dets;
2/
Type created.
SQL>
Hier ist eine Funktion, die die verschachtelte Tabelle zurückgibt ...
create or replace function get_emp_dets (p_dno in emp.deptno%type)
return emp_dets_nt
is
return_value emp_dets_nt;
begin
select emp_dets(empno, ename, job)
bulk collect into return_value
from emp
where deptno = p_dno;
return return_value;
end;
/
... und das ist, wie es funktioniert:
SQL> select *
2 from table(get_emp_dets(10))
3/
EMPNO ENAME JOB
---------- ------------------------------ --------------------
7782 CLARK MANAGER
7839 KING PRESIDENT
7934 MILLER CLERK
SQL>
SQL-Typen bieten uns eine große Funktionalität und erlauben uns, ziemlich ausgefeilte APIs in PL/SQL zu erstellen. Find out more.
0
helfen Dies kann auch:
DECLARE
TYPE t_emptbl IS TABLE OF scott.emp%rowtype;
v_emptbl t_emptbl;
ret_val t_emptbl;
--
Function getEmployeeList Return t_emptbl
IS
BEGIN
SELECT * bulk collect INTO v_emptbl FROM scott.emp;
-- Print nested table of records:
FOR i IN 1 .. v_emptbl.COUNT LOOP
DBMS_OUTPUT.PUT_LINE (v_emptbl(i).empno);
END LOOP;
RETURN v_emptbl;
END;
--
BEGIN
ret_val:= getEmployeeList;
END;
/
1
Ich denke, dass Sie Oracle-Cursor für diese verwenden können (wenn die Oracle-Version unterstützt):
PROCEDURE myprocedure(
mycursor OUT SYS_REFCURSOR)
AS
BEGIN
OPEN mycursor FOR SELECT * FROM mytable;
END;
END;
Verwandte Themen
- 1. Wie kann eine Postgres Stored Function eine Tabelle zurückgeben
- 2. jsonb_populate_record/jsonb_populate_recordset sollte eine Tabelle zurückgeben
- 3. Kann eine PHP-Funktion viele Variablen zurückgeben?
- 4. Kann ein Konstruktor eine SubClass zurückgeben?
- 5. Kann Rolllapply eine Liste von Matrizen zurückgeben?
- 6. Kann eine PHP-Unterfunktion die Hauptfunktion zurückgeben?
- 7. Wie kann ich eine Rückruffunktion zurückgeben?
- 8. kann ein PHP-Array eine Funktion zurückgeben?
- 9. PHP - kann eine Methode einen Zeiger zurückgeben?
- 10. Kann der DbProviderFactory.CreateCommandBuilder tatsächlich eine Null zurückgeben?
- 11. Methode zurückgeben eine Schnittstelle
- 12. Kann eine Jersey GET-Anfrage eine polymorphe Entität zurückgeben?
- 13. Eine ungültige Referenz zurückgeben
- 14. Schienen: Eine 401 zurückgeben?
- 15. eine boolean zurückgeben - jdbcTemplate
- 16. Eine Leere zurückgeben?
- 17. Kann eine HTTP OPTIONS-Anfrage eine 204 zurückgeben oder sollte sie immer 200 zurückgeben?
- 18. Eine Nachricht an SQS zurückgeben
- 19. SQL FUNCTIONS eine Zeile zurückgeben
- 20. Wie kann eine Abfrage nur eine zufällige Zeile für jede einzelne Spalte zurückgeben?
- 21. CodeIgniter - nur eine Zeile zurückgeben?
- 22. ordnungsgemäß zurückgeben eine einzigartige ptr
- 23. CLGeocoder nur eine Ortsmarke zurückgeben
- 24. Eine Liste der Wochentage zurückgeben
- 25. Muss eine Schluckaufgabe etwas zurückgeben?
- 26. Wie kann ich eine übergeordnete Tabelle und eine untergeordnete Tabelle aus einer anderen Tabelle auffüllen?
- 27. Gespeicherte Prozedur: Wie kann ich eine ausgewählte Zeile aus einer Tabelle zurückgeben und eine Spalte in der ausgewählten Tabellenzeile erhöhen?
- 28. Kann eine Java-Methode, die eine Basisklassenmethode implementiert, eine geerbte Klasse zurückgeben?
- 29. Wie kann eine externe Anwendung nur auf eine Tabelle zugreifen?
- 30. Kann ich eine Sicherung wiederherstellen, wenn eine Tabelle beschädigt ist?
Welche Datenbank verwenden Sie? – Lee
Ich benutze Oracle – Jaqualembo
Wie verbrauchen Sie das Verfahren? Sie können eine Ergebnismenge von einem Cursor über einen OUT-Parameter des Datentyps SYS_REFCURSOR zurückgeben, aber Ihr Client muss das Lesen der Ergebnismenge unterstützen. –