sql >> Database >  >> RDS >> PostgreSQL

Hoe toegang te krijgen tot de procedure die een reeks refcursor retourneert van PostgreSQL in Java?

returns setof refcursor betekent dat je een gewone ResultSet . krijgt waarbij elke "rij" een andere . bevat ResultSet bij het aanroepen van getObject() :

Het volgende werkt voor mij:

ResultSet rs = stmt.executeQuery("select * from usp_sel_article_initialdata_new1()");
if (rs.next())
{
  // first result set returned
  Object o = rs.getObject(1);
  if (o instanceof ResultSet)
  {
    ResultSet rs1 = (ResultSet)o;
    while (rs1.next())
    {
       int id = rs1.getInt(1);
       String name = rs1.getString(2);
       .... retrieve the other columns using the approriate getXXX() calls
    }
  }
}

if (rs.next()) 
{
  // process second ResultSet 
  Object o = rs.getObject(1);
  if (o instanceof ResultSet)
  {
    ResultSet rs2 = (ResultSet)o;
    while (rs2.next())
    {
       ......
    }
  }
}

Vanuit psql je kunt ook select * from usp_sel_article_initialdata_new1() gebruiken je hoeft alleen maar FETCH ALL te gebruiken daarna. Zie de handleiding voor een voorbeeld:http://www. postgresql.org/docs/current/static/plpgsql-cursors.html#AEN59018

postgres=> select * from usp_sel_article_initialdata_new1();
 usp_sel_article_initialdata_new1
----------------------------------
 <unnamed portal 1>
 <unnamed portal 2>
(2 rows)

postgres=> fetch all from "<unnamed portal 1>";
 ?column?
----------
        1
(1 row)

postgres=> fetch all from "<unnamed portal 2>";
 ?column?
----------
        2
(1 row)

postgres=>

(Ik heb een dummy-functie gemaakt voor het bovenstaande voorbeeld die slechts één rij retourneert met de waarde 1 voor de eerste cursor en 2 voor de tweede cursor)

Bewerken :

Om dit te laten werken, moet dit binnen een transactie worden uitgevoerd. Daarom moet automatisch vastleggen uitgeschakeld zijn:

connection.setAutoCommit(false);


  1. MySQL - Verwijzen naar geaggregeerde kolom in where-clausule

  2. GATHER_PLAN_STATISTICS genereert geen basisplanstatistieken

  3. ASIN() Voorbeelden in SQL Server

  4. MySQL hoe kap je een tabel af in een opgeslagen procedure?