存储过程返回一个数组;如何在 SQL 中使用?
Posted
技术标签:
【中文标题】存储过程返回一个数组;如何在 SQL 中使用?【英文标题】:Stored procedure returns an array; how to use in SQL? 【发布时间】:2012-07-25 20:40:30 【问题描述】:我正在编写一个由 h2 数据库支持的会计系统。帐户树存储在 ACCOUNTS 表中,PARENT_ID 列存储树中的链接。
要获取树中给定节点的路径,我有以下存储过程:
public static Object[] getAncestorPKs(Long id)
其工作是产生一个整数数组,即给定节点和树根之间的 PARENT_ID 值。我在数据库中以 ANCESTOR_PKS 的名称注册该过程,如下所示:
CREATE ALIAS IF NOT EXISTS ANCESTOR_PKS FOR "xxx.yyy.zzz.getAncestorPKs"
我的问题是我似乎找不到在不触发 SQLException 的情况下使用该东西的方法!我需要通过以下方式使用它:
SELECT ID FROM ACCOUNTS WHERE [...] AND ID IN ANCESTOR_PKS(5) [for example]
我收到以下错误:
Syntax error in SQL statement "SELECT ID FROM ACCOUNTS WHERE ID IN ANCESTOR_PKS[*](5) "; expected "("
但是在 ANCESTOR_PKS 之后有一个括号 !!!这到底是怎么回事?有没有办法将 IN 与存储过程的结果一起使用?我已经搜索和搜索,但是我看到的所有使用 IN 的示例都是文字数组,似乎没有人想到展示如何使用作为返回值的数组一个存储过程。
帮忙???
【问题讨论】:
SELECT ANCESTOR_PKS(5)
返回什么? (或者只是选择存储过程的东西)
它返回一个包含一行的结果集,其中包含org.h2.value.ValueArray
类型的对象,其中包含 (x, y, z) 其中 x, y, z 是节点 5 和节点之间的路径中的节点根,即正是所需的结果。
【参考方案1】:
我对 h2 不熟悉,但 this page 说你必须在数组周围放置 ()。
SELECT ID FROM ACCOUNTS WHERE ID IN (ANCESTOR_PKS(5))
也许你甚至必须添加一个子选择
SELECT ID FROM ACCOUNTS WHERE ID IN (SELECT ANCESTOR_PKS(5))
【讨论】:
哇,我确定我已经尝试过了,但我想没有,因为当我今天尝试时,我不再收到错误...但是,我又收到了一个错误!现在我收到Data conversion error converting "(x, y, z)"
有人可以指出我解决this 问题的正确方向吗?非常感谢你让我解决了最初的问题......我真的开始扯头发了!
顺便说一句:我的 Java 方法必须声明为返回 Object[](参见 here,函数数据类型映射部分),但返回值实际上包含 Longs。
@user1547739 嗯...这是整个错误消息吗?我认为你应该关闭这个问题(点击答案左边的钩子)并开始一个新的问题,因为没有人(除了我自己)还会在这里阅读这个 cmets 来回答它。以上是关于存储过程返回一个数组;如何在 SQL 中使用?的主要内容,如果未能解决你的问题,请参考以下文章
关于SQLserver 存储过程 如何切割一个字符串 转化为数组
SQL SERVER里面如何在存储过程里面获取另一个存储过程所返回的表的数据?