使用REXX访问Teradata输出和DB2输出时出现问题
我有一个REXX作业,需要同时读取Teradata(使用BTEQ)和DB2。目前,我可以从Teradata或DB2中读取它,但不能同时从两者中读取。当我尝试从两者中读取时,Teradata one(首先运行)可以正常工作,但是DB2读取在尝试打开游标时给出了一个错误RC(1) 从Teradata读取的代码(大体上是从中复制的): 要从DB2读取的代码:使用REXX访问Teradata输出和DB2输出时出现问题,db2,mainframe,teradata,rexx,Db2,Mainframe,Teradata,Rexx,我有一个REXX作业,需要同时读取Teradata(使用BTEQ)和DB2。目前,我可以从Teradata或DB2中读取它,但不能同时从两者中读取。当我尝试从两者中读取时,Teradata one(首先运行)可以正常工作,但是DB2读取在尝试打开游标时给出了一个错误RC(1) 从Teradata读取的代码(大体上是从中复制的): 要从DB2读取的代码: ADDRESS TSO "SUBCOM DSNREXX" IF RC THEN rcDB2 = RXSUBCOM('ADD','DSNREXX'
ADDRESS TSO "SUBCOM DSNREXX"
IF RC THEN rcDB2 = RXSUBCOM('ADD','DSNREXX','DSNREXX')
ADDRESS DSNREXX "CONNECT " subsys
sqlQuery = "SELECT COLUMN2 FROM TABLE2;"
ADDRESS DSNREXX "EXECSQL DECLARE C001 CURSOR FOR S001"
IF SQLCODE <> 0 THEN DO
SAY 'DECLARE C001 SQLCODE = ' SQLCODE
EXIT 12
END
ADDRESS DSNREXX "EXECSQL PREPARE S001 FROM :sqlQuery"
IF SQLCODE <> 0 THEN DO
SAY 'PREPARE S001 SQLCODE = ' SQLCODE SQLERROR
EXIT 12
END
ADDRESS DSNREXX "EXECSQL OPEN C001"
IF SQLCODE <> 0 THEN DO
SAY 'OPEN C001 SQLCODE = ' SQLCODE
EXIT 12
END
ADDRESS DSNREXX "EXECSQL FETCH C001 INTO :col2"
IF SQLCODE <> 0 THEN DO
SAY 'FETCH C001 SQLCODE = ' SQLCODE
EXIT 12
END
…然后是从DB2读取的少量代码,然后是从Teradata读取的代码,然后是从DB2读取的更多代码。在与DB2完全相关之前,将其更改为首先从Teradata读取时,它起了作用。我认为这与SYSPRINT或SYSIN无关 我认为您得到的是TSO RC=1,而不是SQLCODE=1(因为没有1的SQLCODE) 1是一个警告,-1是一个错误 和SQL指南 打开tracer并运行它 有一些变量(如下所示)显示有关错误/警告的信息
22 *-* ADDRESS DSNREXX "EXECSQL OPEN C1"
>>> "EXECSQL OPEN C1"
+++ RC(1) +++
23 *-* IF SQLCODE <> 0
28 *-* SAY 'SQLSTATE='sqlstate', SQLERRMC='sqlerrmc', SQLERRP='sqlerrp
22*-*地址DSNREXX“EXECSQL OPEN C1”
>>>“EXECSQL打开C1”
+++RC(1)+++
23*-*如果SQL代码为0
28*-*说'SQLSTATE='SQLSTATE',SQLERRMC='SQLERRMC',SQLERRP='SQLERRP'
SQLSTATE=00000,SQLERRMC=,SQLERRP=DSN29-说'SQLERRD='SQLERRD.1','SQLERRD.2','SQLERRD.3','SQLERRD.4',', sqlerrd.5','sqlerrd.6
SQLERRD=0,0,0,-1,0,0
32-说'SQLWARN='SQLWARN.0','SQLWARN.1','SQLWARN.2','SQLWARN.3',', sqlwarn.4'、'sqlwarn.5'、'sqlwarn.6'、'sqlwarn.7'、', sqlwarn.8',sqlwarn.9',sqlwarn.10
SQLWARN=,N,,,,,2
例如,当两者一起使用时,可能内存不足。谢谢您的回答。我实际上已经对此进行了修复(请参阅编辑以获取解释)前一段时间,但忘了发布它。但是,我仍然几乎不知道旧的实现为什么不起作用。如果您能帮助澄清,我会将此标记为正确答案。我认为您必须转储那些SQLWARN.1 SQLWARN.2等字段,如果您收到警告,找出填写的是哪一个,并通过挖掘手册来解决该错误。它可能与特定的查询有关,当您重新编写程序时,查询略有不同,您使用了不同的游标或其他东西。
ADDRESS TSO "SUBCOM DSNREXX"
IF RC THEN rcDB2 = RXSUBCOM('ADD','DSNREXX','DSNREXX')
ADDRESS DSNREXX "CONNECT " subsys
22 *-* ADDRESS DSNREXX "EXECSQL OPEN C1"
>>> "EXECSQL OPEN C1"
+++ RC(1) +++
23 *-* IF SQLCODE <> 0
28 *-* SAY 'SQLSTATE='sqlstate', SQLERRMC='sqlerrmc', SQLERRP='sqlerrp