我有一个动态sql文件,其中TBCREATOR的名称根据参数中的给定值进行更改。
我使用一个简单的python脚本来更改TBCREATOR=<variable here>
,并将结果写入一个输出sql文件。
下面是我需要替换TBCREATOR变量的文件:
CONNECT to 204.90.115.200:5040/DALLASC user***using****@
select REMARKS from sysibm.SYSCOLUMNS WHERE TBCREATOR='table' AND NAME='LCODE'
@
下面是python脚本:
# !/usr/bin/python3
# #------replace table value with schema name
# print(list_of_lines)
fin = open("decrypt.sql", "rt")
# output file to write the result to
fout = open("decryptout.sql", "wt")
for line in fin:
fout.write(line.replace('table', 'ZXP214'))
fin.close()
fout.close()
在生成decryptout.sql之后,我使用db2 -td@ -vf decryptout.sql
调用它,并得到上面给出的错误。
令人恼火的是,我有另一个sql文件,它包含与decryptout.sql完全相同的数据,它可以使用db2 -td@ -vf ...
命令顺利运行。我试图使用unix命令cmp
来比较生成的文件和我写的文件,变量ZXP214
已经被替换,但没有差异。是什么导致了这个错误?
下面是我将生成的输出与之进行比较的文件(执行时没有错误):
CONNECT to 204.90.115.200:5040/DALLASC user***using****@
select REMARKS from sysibm.SYSCOLUMNS WHERE TBCREATOR='ZXP214' AND NAME='LCODE'
@
2条答案
按热度按时间vom3gejh1#
我发现,特别是在https://ibmzxplore.influitive.com/挑战中,如果您使用java db2命令并在Zowe USS系统(zOS的Unix系统服务)中工作,则会出现字符集冲突。
生成的文件将被标记为ISO 8859 -1,db2将无法正确处理。相反,转到USS界面并选择“创建文件”,给予它一个文件夹和一个名称,它将创建未标记的文件。您可以使用
查看标记,然后编辑该文件,给予所需的命令,db2将正确地与之互操作。
这样可以确保文件作为EBCDIC文件打开。
ut6juiuv2#
如果您使用的Db2-LUW CLP(命令行处理器)是用c/c编写的,并在windows/linux/unix上运行,则您的
CONNECT
语法无效。很遗憾,您的问题标记模糊,因此我们无法确定您实际使用的Db2服务器平台。
对于使用c/c编写的传统
db2
命令的Db2-LUW,type-1CONNECT
语句的语法不允许使用连接字符串(或部分连接字符串)。对于Db2-LUWdb2
clp,目标数据库必须是外部定义的(即不在脚本内)、或者通过catalog tcpip node...
与catalog database...
的传统操作组合、或者必须在db2dsdriver.cfg
配置文件中定义为纯XML。如果要使用连接字符串,则可以使用
clpplus
工具,该工具可用于某些Db2-LUW客户机程序包,并且存在于当前支持的Db2-LUW服务器上。这样,您就可以对Db2使用Oracle样式的脚本。有关详细信息,请参阅联机文档。如果您没有使用c/c++ classic
db2
命令,而是使用仅在Z/OS-USS中可用的java编写的模拟clp,则您必须为该组件打开一个具有IBM支持的票证,因为这与堆栈溢出无关。