当前位置: 首页 > 知识库问答 >
问题:

获取“在不能接受集合的上下文中调用的集合值函数”的基本json_to_recordset查询

段干玺
2023-03-14
select my_schema.my_func(2, 2366800)
=>    my_func
      json
      ----------------------------------------------------
      [{"col_a":"...", "col_b":"...", "col_c":"..."}, ...]

select *
from json_to_recordset(my_schema.my_func(2, 2366800))
as results (col_a         TEXT,
            col_b         TEXT,
            col_c         NUMERIC(10,2))
=> ERROR:  set-valued function called in context that cannot accept a set

除了文档之外,我还根据JSON_TO_Recordset的其他示例对查询进行了模式化。(1,2,3)据我所知,我的查询应该有效。

我已经研究了集值函数错误。(1,2,3;甚至4,它说:“当一个函数返回某物的集合时,你需要把它当作一个表来对待。”)不幸的是,我没有找到关于为什么在这个特定查询中出现这个错误的解释。

共有1个答案

平学
2023-03-14

我的另一个答案是对我的问题的直接答案,但我想单独列出解决方案,因为解决方案对这种情况相当具体,而答案是一般性的。

最简单的解决方案是修改my_func以返回JSON而不是setof JSON,但是这个函数在其他地方使用,所以我想在不修改my_func的情况下处理类型不匹配。

正如这里所提到的,“当一个函数返回某物的集合时,您需要将其视为一个表。”因此,解决方案涉及将my_func的输出视为一个表(单个值),并将这一行传递给json_to_rordset函数。Postgres的横向加入奏效了:

select results.*
from my_spec.my_func(2, 2366800) json,
     lateral json_to_recordset(json)
          as results (col_a         TEXT,
                      col_b         TEXT,
                      col_c         NUMERIC(10,2));
 类似资料:
  • 我想获得firestore集合中的文档总数,我正在制作一个论坛应用程序,所以我想显示每个讨论中的当前评论量。有之类的东西吗?

  • $Eclipse不喜欢后面的add语句,也就是说:ArrayList(SortNames.CelebrityNamesFile)类型中的方法add(SortNames.CelebrityNamesFile)不适用于参数(String) $,然后它不喜欢我的sort语句,也就是说:Bound mismatch:类型集合的泛型方法sort(List T)不适用于参数(ArrayList(sortnam

  • 假设我有这种结构 其中和是集合,和是文档 有没有一种方法可以通过一个查询获得根文档中包含的所有内容<如果我这样问 我只得到字段。我想要的是B的所有文件 我基本上希望我的查询返回 是否可能或者我真的需要对每个集合进行多个查询:/? 假设我有一个代表用户配置文件的非常深的嵌套集合树,我的成本会像地狱一样上升,因为每次我加载用户配置文件时,我都有一个读取请求的乘数其中N是我的树的深度: /.

  • 问题内容: 我正在写一个JPQL查询,它基于 Categories 集合进行查询。我的类别可以为空,因此我正在使用:categories = NULL进行检查。 当类别为NULL时,以上方法可以正常工作。但是,当类别超过一个值时,我得到了错误 java.sql.SQLException:操作数应包含1列 与hibernate有关的痕迹是 (?,?)或(?,?)中的category6_.catego

  • 在连续情景中,我们不得不处理函数的集合和函数的系集。由函数集的名字可以看出,它就是一组函数,通常是一个变量——时间的函数。为描述函数集,我们可以给出集合中各种函数的显式表达式,也可以给出只有集合中的函数才拥有的性质。下面是一些示例: 由以下函数组成的集合: 。 的每个具体值确定了集合中的一个特定函数。 一个由时间函数组成的集合,其中包含频率不超过W周期/秒的所有时间函数。 一个由带宽局限于W、幅度

  • 我有一个集合,其中每个文档都有一些公共数据,如用户名和字符级别,但也有一个私有子集合,它有字符的黄金量。 现在我可以查询特定文档的characters collection,但是子collection数据不会返回,所以我需要执行二次查询来检索它。