Czy procedura Oracle SQL może zwrócić tabelę? Obecnie używam dbms_output
, aby wydrukować wyjścia dwóch kursorów, które są w pętli, chociaż byłoby ładniej, gdyby zamiast tego zwracano dwie kolumny. Czy byłoby to możliwe w ramach procedury?Czy procedura SQL może zwrócić tabelę?
6
A
Odpowiedz
8
Funkcja PL/SQL może zwrócić zagnieżdżoną tabelę. Pod warunkiem, że deklarujemy zagnieżdżoną tabelę jako typ SQL, możemy użyć jej jako źródła zapytania, używając the TABLE() function.
Oto typ, a tabela zagnieżdżona zbudowany z niego:
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>
Oto funkcja, która zwraca że tabela zagnieżdżonej ...
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;
/
... i to jak to działa:
SQL> select *
2 from table(get_emp_dets(10))
3/
EMPNO ENAME JOB
---------- ------------------------------ --------------------
7782 CLARK MANAGER
7839 KING PRESIDENT
7934 MILLER CLERK
SQL>
SQL Types oferują nam ogromną funkcjonalność i pozwalają nam budować całkiem wyrafinowane API w PL/SQL. Find out more.
0
To może pomóc także:
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
myślę, że można użyć Oracle kursora do tego (jeśli wersja Oracle obsługuje):
PROCEDURE myprocedure(
mycursor OUT SYS_REFCURSOR)
AS
BEGIN
OPEN mycursor FOR SELECT * FROM mytable;
END;
END;
Powiązane problemy
- 1. Czy konstruktor może zwrócić subklasę?
- 2. Czy Runnable może zwrócić wartość?
- 3. Czy SqlBulkCopy może utworzyć tabelę z selekcji SQL?
- 4. Czy plik .bat może wykonać zapytanie sql i zwrócić wartość?
- 5. Jak zwrócić tabelę tymczasową z procedury składowanej
- 6. Jak zwrócić tabelę za pomocą mysql Funkcja
- 7. Procedura składowana SQL LIKE
- 8. Czy ImageMagick może zwrócić rozmiar obrazu?
- 9. Czy czas (NULL) może kiedykolwiek zwrócić błąd?
- 10. Czy funkcja JavaScript może się zwrócić?
- 11. Procedura składowana SSIS wykorzystuje tabelę tymczasową 2008 i 2014
- 12. Procedura T-SQL dająca wynik boolowski
- 13. Jak zwrócić tabelę z procedury składowanej?
- 14. Procedura składowana Java Procedura przechowywana w języku PL/SQL
- 15. Czy procedura składowana SQL Server może określić nazwę jej macierzystego procesu?
- 16. Dlaczego LsaAddAccountRights może zwrócić STATUS_INVALID_PARAMETER?
- 17. Uszkodzona procedura składowana SQL Azure SQL może zostać naprawiona tylko przez odtworzenie ponownie:
- 18. Czy procedura składowana MS/Transact-SQL wyszukuje własną nazwę?
- 19. Linq do SQL utworzyć tabelę
- 20. Procedura niepowiadomości kod zwrotny procedury SQL Server
- 21. Linq do Sql: czy instancja DataContext może zwrócić kolekcje zawierające oczekujące zmiany?
- 22. Procedura składowana SQL przekazująca parametr do "zamówienia"
- 23. Procedura składowana SQL Server Foldery/Grupowanie
- 24. Procedura przechowywana procedury przechowywanej serwera SQL
- 25. JQuery.AJAX - czy mój serwer może zwrócić blob danych?
- 26. Czy metoda obsługi protokołu protobuf może zwrócić typ pierwotny?
- 27. Czy klasa Pythona może zwrócić nową instancję klasy?
- 28. Czy nhibernate może zwrócić zapytanie jako IDictionary zamiast klasy entity?
- 29. Czy setTimeout może kiedykolwiek zwrócić 0 jako identyfikator?
- 30. Czy żądanie GET z Jersey może zwrócić obiekt polimorficzny?
Co baza danych używasz? – Lee
Używam Oracle – Jaqualembo
Jak używasz procedury? Możesz zwrócić zestaw wyników z kursora za pomocą parametru OUT typu danych SYS_REFCURSOR, ale twój klient musi obsługiwać odczyt zestawu wyników. –