AS400多成员文件SQL查询

Posted

技术标签:

【中文标题】AS400多成员文件SQL查询【英文标题】:SQL query of multi-member file on AS400 【发布时间】:2010-09-25 16:20:19 【问题描述】:

在 5250 会话中的交互式 SQL 中的 AS400 上,

select * from myfile

仅当 myfile 有多个成员时才从一个成员返回行。

如何从特定成员获取行?

重要提示:最后我想通过 jt400 通过 JDBC 执行此操作,所以我真的想要一个可以在那里工作的解决方案。

谢谢。

【问题讨论】:

【参考方案1】:

为成员创建 SQL 别名并查询别名,示例见this page。

【讨论】:

【参考方案2】:

您可以使用 create alias 命令创建别名:

CREATE ALIAS myLibrary/myAlias FOR memberLibrary/memberFile(memberName)

这将允许您像使用任何其他文件一样使用别名对该成员运行 sql:

SELECT * FROM myLibrary/myAlias

请记住,别名会在您的会话结束后继续存在,它们不是临时的。因此,如果您在完成后不需要别名,请在 QTEMP 中创建别名或在完成后显式删除别名:

DROP ALIAS myLibrary/myAlias

HTH

【讨论】:

谢谢!我知道它可能会宕机,现在我只需要查询所有成员。【参考方案3】:

SQL 别名

OS/400 R430 及更高版本支持 SQL 别名语句。为每个必须访问的成员创建一个别名,然后从应用程序中引用该别名。别名是一个持久对象——它只能被创建一次。在创建ALIAS 时,CREATE ALIAS 中引用的成员不必存在。任何SQL 工具,例如OS/400i5/OS interactive SQL (STRSQL)iSeries Navigator's Run SQL Scripts,都可用于创建别名,例如:

CREATE ALIAS MYLIB.FILE1MBR1 FOR MYLIB.MYFILE(MBR1) 
CREATE ALIAS MYLIB.FILE1MBR2 FOR MYLIB.MYFILE(MBR2)

http://www-01.ibm.com/support/docview.wss?uid=nas1f1eaeecc0af19cc38625669100569213

【讨论】:

【参考方案4】:

这是一个旧帖子,仍然是搜索结果列表中的第一个,我想加强以前的回复:

有时您只需要创建别名作为一次性数据库分析,然后您想创建别名并在查询后立即将其删除;您还有一个包含许多表的数据库库,并且不想在每个查询中限定该库,因此您使用 SET SCHEMA;我喜欢使用 QTEMP 库来创建别名,因为 IBM i AS400 服务器上的 QTEMP 本质上是用于临时对象:

set schema=mylibrary;

create alias qtemp.aliasx for table1(membera);
create alias qtemp.aliasy for table2(memberb);

select  * from qtemp.aliasx;
select  * from qtemp.aliasy;

drop alias qtemp.aliasx;
drop alias qtemp.aliasy;

【讨论】:

以上是关于AS400多成员文件SQL查询的主要内容,如果未能解决你的问题,请参考以下文章

无法在 SQL 2019 Linux 上使用 PolyBase 通过 ODBC 查询 AS400

我可以使用 sql 在 AS400 中创建“逻辑文件”吗?

AS400 - 令牌“!”无效

使用 .NET 连接到 AS400

SQL查询来计算日期范围内的项目?

SQL Server---实现递归查询(使用公共表表达式)