需要访问一个从PostgreSQL返回setof refcursor的过程。
我能够访问第一个对象,但不能访问其余对象,而不能访问其余对象。
con.setAutoCommit(false);
try (CallableStatement proc =
con.prepareCall("{ ? = call usp_sel_article_initialdata_new1() }")) {
proc.registerOutParameter(1, Types.OTHER);
proc.execute();
ResultSet results = (ResultSet) proc.getObject(1);
while (results.next()) {
System.out.println("Result Id" + results.getString(1));
System.out.println("Results Name" + results.getString(2));
}
这给了我第一个refcursor值,但是当我尝试使用第二个refcursor时给了我错误,我使用了这一行:
proc.registerOutParameter(2, Types.OTHER);
它给出了错误。还尝试了:
proc.registerOutParameter(1, Types.REF);
这也行不通。过程示例为:
CREATE OR REPLACE FUNCTION usp_sel_article_initialdata_new1()
RETURNS SETOF refcursor AS
$BODY$
Declare swv_refcur refcursor;
swv_refcur2 refcursor;
DECLARE r record;
BEGIN
open SWV_RefCur for Select OM.opID as ID,OM.OperatorName as Name from operator
AS OM (OPid bigint,OperatorName character varying(100),status boolean)
where OM.status = true
order By OperatorName;
return next SWV_RefCur;
open SWV_RefCur2 for Select CC.cirid as ID,CC.cirnm as Name from circle
AS CC (cirid bigint,cirnm character varying(100),status boolean)
where Status = true and cirid not in(28,31)
order by cirnm;
return next SWV_RefCur2;
请帮助我如何访问第二个对象。
returns setof refcursor
表示您在调用时得到一个常规ResultSet
,其中每个“行”包含 另一个 ResultSet
getObject()
:
以下对我有用:
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())
{
......
}
}
}
从内部psql
您也可以使用,select * from usp_sel_article_initialdata_new1()
您只需要在FETCH ALL
以后使用即可。有关示例,请参见手册: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=>
(我为上面的示例创建了一个虚拟函数,该函数仅返回一行包含1
第一个游标和2
第二个游标的值)
编辑 :
为了使其正常工作,它需要在事务内部运行。因此,必须关闭自动提交:
connection.setAutoCommit(false);
问题内容: 在android中,我正在创建用于url连接的线程。在线程中,我将响应消息存储在全局声明的字符串中。当我访问method方法时,它返回null。 当我调用该方法时,它返回null。 问题答案: 您真的只想使用它,尝试一下
问题内容: 我做了这样的一个波纹管: 但是当我尝试通过getTemp使用temp时我得到0 我只想使用我在线程中所做的计算将其存储在某些变量中以备后用。 问题答案: 或者简单地添加 等待线程完成,然后再获得结果。 您的问题是您试图在计算结果之前获得结果。您应该等待线程完成后才能获得结果。这个答案也许不是最好的,但是是最简单的。由于其他人已经在使用Executors课程,所以我不想重复他们的答案。但
我正在尝试访问秒napshot.data()返回的内容,但有一个问题,如下面的评论所述。我试图创建一个异步函数,但无济于事。知道出了什么问题吗?请查看2条评论。
问题内容: 我希望我的控制器在用户没有权限查看特定页面时返回正确的HTTP响应代码。 问题答案: 匆匆 如果您使用的是普通JSP视图(最常见),则只需添加 视图文件中的某处。在顶部是一个不错的地方。 详情 在MVC中,我将始终在视图中进行设置,在大多数情况下,对于Spring- MVC,请使用来呈现正确的视图以响应抛出的运行时Exception。 例如:在控制器或服务层中创建一个并将其抛出,并使异
我试图从Laravel项目、DBeaver和Artisan访问我的PostgreSQL数据库。从Laravel project或Artisan()访问它总是会导致: 无法连接到服务器:连接被拒绝 服务器是否在主机“127.0.0.1”上运行,并在端口5432上接受TCP/IP连接 因为我不依赖我的Laradock设置,而且我对Laravel也不太熟悉,所以我确实用默认设置重新下载了Laradock
问题内容: 从如何在PostgreSql的预订表中找到第一次空闲时间的最佳答案中选择 用于查找在给定日期和时间(2012年11月17日:在下面的示例中)开始的时间表中的间隔,它还可以查找周六,周日和公共假日。表中定义了公众假期 如何也排除周末和公共假期? 硬编码空闲时间作为查询之类的保留时间 对于每个空闲时间范围,都需要在联合中有单独的行。 从给定的日期和时间开始,在工作日和工作时间(8:00 .