PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Làm thế nào để truy cập thủ tục trả về con trỏ setof từ PostgreSQL trong Java?

returns setof refcursor nghĩa là bạn nhận được ResultSet thông thường trong đó mỗi "hàng" chứa khác ResultSet khi gọi getObject() :

Những điều sau đây phù hợp với tôi:

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

Từ bên trong psql bạn cũng có thể sử dụng select * from usp_sel_article_initialdata_new1() bạn chỉ cần sử dụng FETCH ALL sau đó. Xem hướng dẫn sử dụng để biết ví dụ: 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=>

(Tôi đã tạo một hàm giả cho ví dụ trên chỉ trả về một hàng duy nhất có giá trị 1 cho con trỏ đầu tiên và 2 cho con trỏ thứ hai)

Chỉnh sửa :

Để điều này hoạt động, điều này cần phải được chạy bên trong một giao dịch. Đối với tính năng tự động gửi phải được tắt:

connection.setAutoCommit(false);


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgres lỗi cú pháp bảng thả

  2. Tại sao kết quả của COUNT nhân đôi khi tôi thực hiện hai kết hợp?

  3. Chỉ xuất các chế độ xem trong Postgres

  4. So sánh varchar với char

  5. nhóm các khoảng thời gian liên tiếp theo sql