来自不同长度变量的 Exec sql 的 SQLRPGLE 语法?
SQLRPGLE syntax for Exec sql from a varying length variable?
在 IBMi 上(数据库是 DB2 for i)在 SQLRPGLE 中,我有一个程序可以将大型 SQL 语句构建到我想要 运行 的变量中。
当我尝试运行它作为一个变量时,我收到一个令牌错误
一些背景
这是一个有效的示例,因为它不使用变量
Exec SQL
Create table MyLib/MyFile as(select * from XXLIB/XXFILE)
DATA INITIALLY DEFERRED REFRESH DEFERRED
maintained by user;
当我将其保存在@SQLStm 之类的变量中,然后尝试以 SQL
的形式执行时
Exec SQL
:@SQLStm;
我收到错误
令牌:无效。有效标记: .
我也愿意接受不同的方法
https://www.ibm.com/support/knowledgecenter/en/ssw_ibm_i_71/cl/runsqlstm.htm
像 运行SQLSTM SRCFILE(MYLIB/MYFILE) SRCMBR(MYMBR)
也许有办法获取变量并将其保存到源成员?
然后在源成员
上使用运行SQLSTM
显示一些代码:
变量的定义
d @SQLStm s A Len(6144) Varying(4)
即使尝试将 SQL 语句的一部分作为变量
@SQLStm = select * from XXLIB/XXFILE;
然后尝试:
Exec SQL
Create table MyLib/MyFile as( :@SQLStm)
DATA INITIALLY DEFERRED REFRESH DEFERRED
maintained by user;
我收到错误
令牌:无效。有效标记: .
我希望 SQLRPLE 能够编译
而不是 SQL 预编译失败。
消息 ID SEV 记录文本
SQL0104 30 236 位置 31 令牌:无效。有效令牌:
.
消息摘要
总信息警告错误严重终端
1 0 0 0 1 0
在源
中发现 30 级严重性错误
这是静态的SQL
Exec SQL
Create table MyLib/MyFile as(select * from XXLIB/XXFILE)
DATA INITIALLY DEFERRED REFRESH DEFERRED
maintained by user;
你要的是动态的SQL
wSqlStmt = 'Create table MyLib/MyFile as(select * from XXLIB/XXFILE)'
+ ' DATA INITIALLY DEFERRED REFRESH DEFERRED'
+ ' maintained by user';
exec SQL
execute immediate :wSqlStmt;
请注意,某些语句不能 execute immediate
,您必须 prepare
然后 execute
它们。
可以在 Embedded SQL programming 手册中找到更多信息。
在 IBMi 上(数据库是 DB2 for i)在 SQLRPGLE 中,我有一个程序可以将大型 SQL 语句构建到我想要 运行 的变量中。
当我尝试运行它作为一个变量时,我收到一个令牌错误
一些背景
这是一个有效的示例,因为它不使用变量
Exec SQL
Create table MyLib/MyFile as(select * from XXLIB/XXFILE)
DATA INITIALLY DEFERRED REFRESH DEFERRED
maintained by user;
当我将其保存在@SQLStm 之类的变量中,然后尝试以 SQL
的形式执行时Exec SQL
:@SQLStm;
我收到错误 令牌:无效。有效标记: .
我也愿意接受不同的方法 https://www.ibm.com/support/knowledgecenter/en/ssw_ibm_i_71/cl/runsqlstm.htm 像 运行SQLSTM SRCFILE(MYLIB/MYFILE) SRCMBR(MYMBR)
也许有办法获取变量并将其保存到源成员? 然后在源成员
上使用运行SQLSTM显示一些代码: 变量的定义
d @SQLStm s A Len(6144) Varying(4)
即使尝试将 SQL 语句的一部分作为变量
@SQLStm = select * from XXLIB/XXFILE;
然后尝试:
Exec SQL
Create table MyLib/MyFile as( :@SQLStm)
DATA INITIALLY DEFERRED REFRESH DEFERRED
maintained by user;
我收到错误 令牌:无效。有效标记: .
我希望 SQLRPLE 能够编译 而不是 SQL 预编译失败。
消息 ID SEV 记录文本
SQL0104 30 236 位置 31 令牌:无效。有效令牌:
.
消息摘要
总信息警告错误严重终端
1 0 0 0 1 0
在源
这是静态的SQL
Exec SQL
Create table MyLib/MyFile as(select * from XXLIB/XXFILE)
DATA INITIALLY DEFERRED REFRESH DEFERRED
maintained by user;
你要的是动态的SQL
wSqlStmt = 'Create table MyLib/MyFile as(select * from XXLIB/XXFILE)'
+ ' DATA INITIALLY DEFERRED REFRESH DEFERRED'
+ ' maintained by user';
exec SQL
execute immediate :wSqlStmt;
请注意,某些语句不能 execute immediate
,您必须 prepare
然后 execute
它们。
可以在 Embedded SQL programming 手册中找到更多信息。