DB2 - 如何使用IBM System i Access for Windows GUI Tool中的参数运行ad hoc select查询

时间:2010-02-25 19:10:21

标签: sql db2 ibm-midrange iseries-navigator

我想在IBM System I Navigator工具中使用我声明的变量运行一些ad hoc select语句。

例如,在SQL Server世界中,我很容易在SQL Server Management Studio查询窗口中执行此操作,如下所示:

DECLARE @VariableName varchar(50);
SET @VariableName = 'blah blah';

select * from TableName where Column = @VariableName;

如何在IBM System I Navigator工具中执行类似操作?

3 个答案:

答案 0 :(得分:7)

我在搜索同一个问题时遇到过这篇文章。我的同事提供了答案。确实可以在Navigator中的ad hoc SQL语句中声明变量。这就是它的完成方式:

CREATE OR REPLACE VARIABLE variableName VARCHAR(50);
SET variableName = 'blah';
SELECT * FROM table WHERE column = variableName;
DROP VARIABLE variableName;

如果您不删除变量名称,它将会挂起,直到谁知道...

答案 1 :(得分:1)

目前,我们正在处理同样的问题。不幸的是,我们得出结论认为这是不可能的。我同意,它会很棒,但它不会那样工作。 iNavigator不支持SET或Define。您可以在嵌入式SQL中执行此操作,但这不是嵌入式SQL。即使您创建了一个单独的文档(xxx.sql),也需要打开此文档来运行脚本,使其成为一个交互式脚本(即不允许使用DECLARE SECTION)。

作为替代方案,在SQL屏幕/脚本中,您可以使用 CL:。此前缀之后的任何内容都作为CL命令执行。你可以用这种方式操纵你的表格(例如RNMF)。

作为第二种选择,iSeries支持Rexx脚本(默认情况下与os一起安装)。 Rexx是一种很好的动态脚本语言,它支持嵌入式SQL。我做了很多次,效果很好。我甚至为我们的生产环境创建了脚本。

只需使用示例PREPARE和CURSOR语句创建一个“默认”脚本,然后随意复制。有了这个脚本,你可以玩。有关exec-sql的正确语法,请参阅Rexx手册。此外,您确实有STDIN和STDOUT,但您可以使用'OVRDBF'指向数据库表(物理文件)。如果您需要示例Rexx脚本,请告诉我。

请注意,手册“SQL嵌入式编程”确实有Rexx示例。

答案 2 :(得分:0)

以下是其他几种选择。

数据传输工具 - 您可以从命令行(RTOPCB)运行iSeries数据传输工具。首先,运行GUI版本并创建定义文件。如果使用文本编辑器编辑此文件,您将看到这只是一个老式的INI文件,您可以轻松找到包含查询的行。从那里,您可以编写批处理文件或以其他方式预处理文本文件,以允许您在将查询提交给查询工具之前对其进行操作。

QSHELL - 如果您可以以交互方式登录iSeries,那么您可能会发现QSHELL环境比CL或REXX更熟悉(尽管REXX很有趣)。 QSHELL是在iSeries上运行的完整POSIX环境。使用命令STRQSH启动QSHELL。你可以将ksh或csh作为shell。在QSHELL内部,有一个名为“db2”的命令可以提交查询。所以,你应该能够在QSHELL中做这样的事情:

system> VariableName = 'blah blah'
system> db2 "select * from TableName where Column = \'$VariableName\'"

你可能不得不使用引号来让ksh正确传递它们。

此外,在QSHELL中,您应该有一个完整的Perl安装,允许您使用DBI来获取数据。

与iSeries上的数据交互的其他一些方法:使用Python通过ODBC从客户端进行查询;通过JDBC从Jython客户端查询;直接在iSeries上安装Jython,然后通过JDBC进行查询。