Problèmes d'utilisation de REXX pour accéder à la fois à la sortie Teradata et à la sortie DB2

StackOverflow https://stackoverflow.com/questions/1403571

  •  05-07-2019
  •  | 
  •  

Question

J'ai un travail REXX qui doit être lu à partir de Teradata (à l'aide de BTEQ) et de DB2. À l'heure actuelle, je peux le lire soit à partir de Teradata, soit à partir de DB2, mais pas les deux. Lorsque j'essaie de lire dans les deux cas, celui de Teradata (qui s'exécute en premier) fonctionne correctement, mais la lecture de DB2 génère une erreur de type RC (1) lors de la tentative d'ouverture du curseur.

Code à lire à partir de Teradata (généralement copié à partir de 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

Code à lire à partir de 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

Je suppose que cela a quelque chose à voir avec mon utilisation de SYSPRINT et SYSIN. Quelqu'un sait comment je peux le faire fonctionner?

Merci.

Modifier

La question posée était en réalité erronée. Toutes mes excuses pour ne pas avoir corrigé cela plus tôt.

Ce que j’avais vraiment fait, c’est:

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

... suivi d'une petite lecture à partir de DB2, suivi du code à lire à partir de Teradata, suivi d'un code supplémentaire à lire à partir de DB2. Lorsque cela a été modifié en lecture de Teradata avant d’avoir quoi que ce soit à faire avec DB2, cela a fonctionné.

Était-ce utile?

La solution

Je pense que cela n’a rien à voir avec SYSPRINT ou SYSIN.

Je pense que vous obtenez TSO RC = 1, pas SQLCODE = 1 (car il n’existe pas de SQLCODE de 1.

1 est un avertissement, -1 est une erreur. Vous pouvez le rechercher dans la programmation d'applications DB2. et Guide SQL

Allumez TRACE R et exécutez-le.

Certaines variables (illustrées ci-dessous) affichent des informations sur l'erreur / l'avertissement.

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 - DITES 'SQLERRD =' sqlerrd.1 ',' sqlerrd.2 ',' sqlerrd.3 ',' sqlerrd.4 ',',                  sqlerrd.5 ',' sqlerrd.6
SQLERRD = 0, 0, 0, -1, 0, 0
    32 - DITES '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,,,,

Par exemple, il se peut que, lorsque les deux sont utilisés ensemble, la mémoire est insuffisante.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top