sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvordan får man adgang til proceduren, der returnerer sæt af refursor fra PostgreSQL i Java?

returns setof refcursor betyder, at du får et almindeligt ResultSet hvor hver "række" indeholder en anden ResultSet når du kalder getObject() :

Følgende virker for mig:

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())
    {
       ......
    }
  }
}

Indefra psql du kan også bruge select * from usp_sel_article_initialdata_new1() du skal blot bruge FETCH ALL bagefter. Se manualen for et eksempel: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=>

(Jeg oprettede en dummy-funktion til ovenstående eksempel, der kun returnerer en enkelt række med værdien 1 for den første markør og 2 for den anden markør)

Rediger :

For at dette kan fungere, skal dette køres inde i en transaktion. Derfor skal autocommit være slået fra:

connection.setAutoCommit(false);


  1. Hvordan finder man en bestemt række i MySQL-forespørgselsresultatet?

  2. Sådan får du Oracle til at oprette tabelsætning i SQL*Plus

  3. Hvordan kan jeg importere en stor (14 GB) MySQL-dumpfil til en ny MySQL-database?

  4. Hvad hvis jeg har brug for et meget meget stort autoincrement-id?