在db2 sql文件中重新放置一个字会导致DSNC105I:阅读命令错误时到达文件结尾

j9per5c4  于 2022-11-07  发布在  DB2
关注(0)|答案(2)|浏览(111)

我有一个动态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'
@
vom3gejh

vom3gejh1#

我发现,特别是在https://ibmzxplore.influitive.com/挑战中,如果您使用java db2命令并在Zowe USS系统(zOS的Unix系统服务)中工作,则会出现字符集冲突。

echo "CONNECT ..." > syscat.clp

生成的文件将被标记为ISO 8859 -1,db2将无法正确处理。相反,转到USS界面并选择“创建文件”,给予它一个文件夹和一个名称,它将创建未标记的文件。您可以使用

ls -T

查看标记,然后编辑该文件,给予所需的命令,db2将正确地与之互操作。

open(input_file_name, mode=”w”, encoding=”cp1047”)

这样可以确保文件作为EBCDIC文件打开。

ut6juiuv

ut6juiuv2#

如果您使用的Db2-LUW CLP(命令行处理器)是用c/c编写的,并在windows/linux/unix上运行,则您的CONNECT语法无效。
很遗憾,您的问题标记模糊,因此我们无法确定您实际使用的Db2服务器平台。
对于使用c/c
编写的传统db2命令的Db2-LUW,type-1 CONNECT语句的语法不允许使用连接字符串(或部分连接字符串)。对于Db2-LUW db2 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支持的票证,因为这与堆栈溢出无关。

相关问题