首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Informix 11.70.FC8GE -如何使用SELECT将列表数据类型传递给SPL

问Informix 11.70.FC8GE -如何使用SELECT将列表数据类型传递给SPL
EN

Stack Overflow用户
提问于 2015-12-19 04:21:56
回答 1查看 1.3K关注 0票数 2

我看到了另一个关于将集合数据类型推送到c#代码的问题,但它并没有真正回答我想要做的事情。

我正在尝试使用select将列表数据类型传递给SPL。我知道在SPL中可以这样定义和设置列表:

代码语言:javascript
复制
DEFINE a LIST(INTEGER NOT NULL);
LET a = LIST{(SELECT unique b from numberTable)};

我还知道,如果SPL的变量是LIST,则可以将list发送到SPL。

代码语言:javascript
复制
execute procedure someProc(LIST{1,2,3});

了解了这两件事后,我想尝试从SELECT为变量创建一个列表。

代码语言:javascript
复制
execute procedure someProc(LIST{(SELECT unique b from numberTable)});

所以我创建了一个小的测试用例。

代码语言:javascript
复制
create table tab1 (a int);

insert into tab1 values (1);
insert into tab1 values (2);
insert into tab1 values (3);

create procedure retInt(c LIST(INTEGER NOT NULL))
RETURNING INTEGER;

DEFINE b INTEGER;

FOREACH SELECT * INTO b from TABLE(c)
        return b with RESUME;
end FOREACH

end procedure;

-- Works
execute procedure retInt(LIST{1,2,3});

-- Doesn't work
-- returns 284: A subquery has returned not exactly one row.
execute procedure retInt(LIST{(SELECT a from tab1)});

我还尝试了像这样对select进行类型转换

代码语言:javascript
复制
execute procedure retInt((SELECT a from tab1)::LIST(INTEGER NOT NULL));

不用说,这造成了语法错误。

我可能正在尝试做一些不可能的事情。浏览IBM的文档时,我没有找到任何东西,但是有时我觉得他们的文档可能很难使用。

有什么想法吗?

先谢谢你,卡顿

EN

回答 1

Stack Overflow用户

发布于 2015-12-22 03:16:44

在Informix中,您不能直接从SELECT语句构建列表,除非select恰好返回1行。我怀疑在您给出的示例中,查询恰好返回1行,并且创建了列表。

Informix不允许从返回多行的SELECT创建列表,但它接受从返回多行的SELECT创建多集,然后可以将这些行转换为列表。

代码语言:javascript
复制
EXECUTE PROCEDURE retInt((MULTISET(SELECT ITEM a FROM tab1)::LIST(INTEGER NOT NULL)));

要创建多个整数值,而不是多个行值,关键字ITEM是必需的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34363383

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档