質問

Teradata(BTEQを使用)とDB2の両方から読み取る必要があるREXXジョブがあります。現在、TeradataまたはDB2から読み取ることができますが、両方から読み取ることはできません。両方から読み取ろうとすると、最初に実行されるTeradataが正常に動作しますが、DB2の読み取りでは、カーソルを開こうとするとRC(1)のエラーが発生します。

Teradataから読み取るコード(一般的に http://www.teradataforumからコピーされます。 com / teradata / 20040928_131203.htm ):

ADDRESS TSO "DELETE BLAH.TEMP"
"ALLOC FI(SYSPRINT) DA(BLAH.TEMP) NEW CATALOG SP(10 10) TR RELEASE",
   "UNIT(SYSDA) RECFM(F B A) LRECL(133) BLKSIZE(0) REUSE"
"ATTRIB FBATTR LRECL(220)"
"ALLOC F(SYSIN) UNIT(VIO) TRACKS SPACE(10,10) USING(FBATTR)"
/* Set up BTEQ script */
QUEUE ".RUN FILE=LOGON"
QUEUE "SELECT COLUMN1 FROM TABLE1;"
/* Run BTEQ script */
"EXECIO * DISKW SYSIN (FINIS"
"CALL 'SYS3.TDP.APPLOAD(BTQMAIN)'"; bteq_rc = rc
"FREE FI(SYSPRINT SYSIN)"
/* Read and parse BTEQ output */
"EXECIO * DISKR SYSPRINT (STEM BTEQOUT. FINIS"
DO I = 1 to BTEQOUT.0
   ...
END

DB2から読み取るコード:

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

これは、SYSPRINTとSYSINの使用と関係があると思われます。誰も私がこれを機能させる方法を知っていますか?

ありがとう。

編集

前述の質問は実際には間違っていました。これを早めに修正しないことをおologiesびします。

私が本当にやったことはこれです:

ADDRESS TSO "SUBCOM DSNREXX" 
IF RC THEN rcDB2 = RXSUBCOM('ADD','DSNREXX','DSNREXX') 
ADDRESS DSNREXX "CONNECT " subsys 

... DB2からの小さな読み取りが続き、Teradataから読み取るコードが続き、DB2から読み取るコードが続きます。これがDB2に関係する前に最初にTeradataからの読み取りに変更されたとき、機能しました。

役に立ちましたか?

解決

これはSYSPRINTまたはSYSINとは関係ないと思います。

SQLCODE = 1ではなく、TSO RC = 1になっていると思います(1のSQLCODEがないため)

1は警告、-1はエラーです。これは、DB2アプリケーションプログラミングで調べることができます。 およびSQLガイド

TRACE Rをオンにして実行します。

エラー/警告に関する情報を表示する変数(以下に示す)があります。

22 *-* ADDRESS DSNREXX "EXECSQL OPEN C1"                                  
   >>>   "EXECSQL OPEN C1"                                                
   +++ RC(1) +++                                                          
23 *-* IF SQLCODE <> 0                                                    
28 *-* SAY 'SQLSTATE='sqlstate', SQLERRMC='sqlerrmc', SQLERRP='sqlerrp    

SQLSTATE = 00000、SQLERRMC =、SQLERRP = DSN
    29 - SAY 'SQLERRD =' sqlerrd.1 '、' sqlerrd.2 '、' sqlerrd.3 '、' sqlerrd.4 '、'、                  sqlerrd.5 '、' sqlerrd.6
SQLERRD = 0、0、0、-1、0、0
    32 - SAY '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、、、、、

たとえば、両方を同時に使用すると、メモリが不足する可能性があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top