我想运行一些特设使用可变我声明选择在IBM系统I导航工具语句DB2。

例如,在SQL Server的世界,我会很容易地做到这一点,像这样的SQL Server Management Studio中的查询窗口:

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

select * from TableName where Column = @VariableName;

我怎样才能做到在IBM系统I导航工具类似的东西?

有帮助吗?

解决方案

我碰到这个帖子跑而寻找同样的问题。我的同事提供了答案。它确实有可能宣布在导航特设SQL语句的变量。这是它是如何做:

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

如果你不降的变量名称将保留,直到谁知道什么时候...

其他提示

目前,我们正在努力在工作中同样的问题。 Unfortunaly,我们认为这是不可能的。我同意,这将是伟大的,但它只是不这样的。 iNavigator不支持SET或定义。你可以这样做,在嵌入式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例子。

这里有几个其他的替代品。

数据传输工具 - 可以运行在命令行(RTOPCB)在iSeries数据传输工具。首先,运行GUI版本,并创建一个定义文件。如果编辑使用文本编辑器这个文件,你会看到,这仅仅是一个老式的INI文件,你可以很容易地找到它的查询行。从那里,你可以编写一个批处理文件或以其他方式预先处理文本文件,以便您可以将它提交给查询工具之前,操作查询。

QSHELL - 如果你能在交互方式登录到iSeries,那么你可能会发现QSHELL环境比CL或REXX更熟悉的(虽然REXX是一种乐趣)。 QSHELL是在iSeries上运行一个完整的POSIX环境。使用命令STRQSH启动QSHELL。你可以有KSH或CSH作为外壳。里面QSHELL,有一个名为“DB2”用于提交的查询命令。所以,你应该能够做这样的事情里面QSHELL:

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

您可能必须与引号,以获得KSH小提琴正确地传递他们。

另外,内部QSHELL,你应该有一个完整的Perl安装,这将允许您使用DBI来获取数据。

一些其它的方式与在iSeries数据进行交互:从经由ODBC的Python客户端查询;从经由JDBC Jython的客户端查询;查询经由JDBC直接在iSeries安装Jython和然后

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top