0


1

Teradata(BTEQを使用)とDB2の両方から読み取る必要があるREXXジョブがあります。 現時点では、TeradataとDB2のどちらからでも読み取ることができますが、両方を読み取ることはできません。 両方から読み込もうとすると、(最初に実行される)Teradataが正常に機能しますが、DB2の読み取りでカーソルをオープンしようとするとRC(1)のエラーが発生します。

Teradataから読み取るコード(概してhttp://www.teradataforum.com/teradata/20040928_131203.htmからコピー):

アドレスTSO "DELETE BLAH.TEMP" "ALLOC FI(SYSPRINT)DA(BLAH.TEMP)新しいカタログSP(10 10)TR RELEASE"、 "UNIT(SYSDA)RECFM(FBA)LRECL(133)BLKSIZE(0)再使用" "ATTRIB FBATTR LRECL(220)" "ALLOC F(SYSIN)UNIT(VIO)トラックスペース(10,10)using(FBATTR)" / * BTEQスクリプトのセットアップ* / QUEUE ".RUN FILE = LOGON" QUEUE "SELECT COLUMN1 FROM TABLE1; " / * BTEQスクリプトを実行します* / "EXECIO * DISKW SYSIN(FINIS" "CALL 'SYS3.TDP.APPLOAD(BTQMAIN)'"; bteq_rc = rc "無料FI(SYSPRINT SYSIN)" / * BTEQ出力を読み取り、解析します* / " EXECIO * DISKR SYSPRINT(STEM BTEQOUT。 FINIS "BTEQOUT.0に対してI = 1を実行します 終わり

DB2から読み取るコード:

rcDB2 = RXSUBCOM( 'ADD'、 'DSNREXX'、 'DSNREXX')の場合は、アドレスTSO "SUBCOM DSNREXX" ADDRESS DSNREXX "CONNECT" subsys

"sqlQuery =" SELECT COLUMN2 FROM TABLE2; "

SQLSODE <> 0でDECLARE C001 SQLCODE = 'SQLコードの終了12 END ADDRESS DSNREXX'でEXECSQL PREPARE S001を実行した場合:SQLCODE <> 0の場合SQLCODE <> 0を指定します。 = 'SQLCODE SQLERROR EXIT 12 END ADDRESS DSNREXX "EXECSQL OPEN C001" IF SQLCODE <> 0の場合、「C001を開く」SQLCODE =' SQLCODE EXIT 12 END

ADDRESS DSNREXX "EXECSQL FETCH C001入力:col2" IF SQLCODE <> 0の場合 'FETCH C001 SQLCODE =' SQLCODE終了12 END

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

ありがとう。

編集

述べられた質問は実際には間違っていました。 これを早期に修正していないことをお詫び申し上げます。

私が本当にしたことはこれを持っていることでした:

rcDB2 = RXSUBCOM( 'ADD'、 'DSNREXX'、 'DSNREXX')の場合は、アドレスTSO "SUBCOM DSNREXX" ADDRESS DSNREXX "CONNECT" subsys

…​followed by a small read from DB2, then followed by the code to read Teradataから、その後にDB2から読み取るコードが続きます。 DB2とはまったく関係なく、これが最初にTeradataからの読み取りに変更されたとき、それは機能しました。

1 Answer


2


これが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 、、、、、、

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