如何存储我从 Postgres 存储函数返回的数据

Posted

技术标签:

【中文标题】如何存储我从 Postgres 存储函数返回的数据【英文标题】:How to store the data I get back from Postgres stored function 【发布时间】:2015-01-16 19:07:50 【问题描述】:

我目前正在调用如下的存储函数:

SQLQuery query = session.createSQLQuery(my_function())

这个函数返回一个表:

 RETURNS TABLE(
        userid            BIGINT,
        user_height    DOUBLE PRECISION
    )

如何获取这两列并将它们存储到 2 个数组列表中?

我试过了:

List<Object[]> data= query.list();
        List<Long> result= newArrayList();

        for (Object[] each: data)
        
            Long userId= (Long) point[0];
            result.add(userId);

        

我收到了exception: org.hibernate.exception.SQLGrammarException: user lacks privilege or object not found: MY_FUNCTION()

【问题讨论】:

【参考方案1】:

CALL您的存储过程并将结果映射到一类对象,如下例所示:

class UserHeight

  public long userid;
  public double user_height;


Query query = session.createSQLQuery("CALL my_function()")
    .addEntity(UserHeight.class);

List result = query.list();
for(int i=0; i<result.size(); i++)
    UserHeight height = (UserHeight)result.get(i);
    System.out.println(height.height);

【讨论】:

您好 gknicker,我试过这个,但得到一个未知实体错误。我用这两个字段创建了这个类。用@Entity 和@Table 标记它并在数据库中创建一个表。

以上是关于如何存储我从 Postgres 存储函数返回的数据的主要内容,如果未能解决你的问题,请参考以下文章

Postgres:从存储函数返回结果或错误

如何通过 Postgres 11 函数(存储过程)在某个时区返回 $TIMESTAMP 或之前的最新行?

Postgres存储过程:如何使用out参数返回多条记录?

Postgres 存储函数可以同时具有返回值和输出参数吗?

如何在 Postgres 函数中存储日期变量?

如何通过 postgres 中的存储函数压缩 CSV 文件