sql >> Database teknologi >  >> RDS >> Oracle

Sådan returneres et brugerdefineret sæt i PL/SQL-lagret procedure

Medmindre du er særligt indstillet på at bruge en samling, ville det være nemmere at bruge en ref-markør:

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;
/

Fra JDBC kan du så gøre noget som:

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

og du kan derefter iterere over resultatsættet, som du ville gøre med ethvert andet.

Du kan også bruge en funktion i stedet:

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;
/

og

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

Det er klart, at du skal håndtere alle andre parametre, du overfører til din egentlige procedure/funktion.



  1. RADIANS() Eksempler i SQL Server

  2. PDO-forespørgselsmetode med bindValue() ser ikke ud til at virke

  3. lokale samlingstyper er ikke tilladt i SQL-sætninger

  4. MySQL Skift brugeradgangskode