Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jak zwrócić niestandardowy zestaw w procedurze składowanej PL/SQL?

Jeśli nie jesteś szczególnie nastawiony na używanie kolekcji, łatwiej byłoby użyć kursora ref:

CREATE OR REPLACE PROCEDURE sample_procedure ( 
   p_some_select_sql_result OUT SYS_REFCURSOR 
) 
AS 
BEGIN
   OPEN p_some_select_sql_result FOR
      SELECT ...
      FROM ...
      JOIN ...
      ... etc.;
END;
/

Z JDBC możesz zrobić coś takiego:

cStmt = conn.prepareCall('{ call sample_procedure(?) }');
cStmt.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR);
cStmt.execute();
rSet = cStmt.getCursor(1);

a następnie możesz iterować zestaw wyników, tak jak w przypadku każdego innego.

Zamiast tego możesz użyć funkcji:

CREATE OR REPLACE FUNCTION sample_function RETURN SYS_REFCURSOR
AS 
   l_some_select_sql_result
BEGIN
   OPEN l_some_select_sql_result FOR
      SELECT ...
      FROM ...
      JOIN ...
      ... etc.;

   RETURN l_some_select_sql_result;
END;
/

i

cStmt = conn.prepareCall('{ ?=call sample_function }');
cStmt.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR);
cStmt.execute();
rSet = cStmt.getCursor(1);

Oczywiście musisz obsługiwać wszelkie inne parametry, które przekazujesz do swojej prawdziwej procedury/funkcji.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ORA-01591 - Oracle usuwa dane ze zdalnej tabeli serwera sql

  2. Losowy ciąg SQL z listy

  3. Jak sprawdzić indeks w Oracle?

  4. Wywołanie funkcji Oracle PLSQL w drugiej funkcji

  5. SQL ROWNUM jak zwrócić wiersze między określonym zakresem