مشاكل في استخدام REXX الوصول إلى كل من "تيراداتا" إنتاج و إخراج DB2

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

  •  05-07-2019
  •  | 
  •  

سؤال

لدي REXX عمل يحتاج إلى قراءة كل من "تيراداتا" (باستخدام BTEQ) و DB2.في الوقت الحاضر, و يمكن الحصول عليها إما قراءة من "تيراداتا" أو DB2, ولكن ليس على حد سواء.عند محاولة قراءة من كل من "تيراداتا" (الذي يعمل الأولى) يعمل بشكل جيد ولكن DB2 قراءة يعطي خطأ من روتردام(1) عند محاولة فتح المؤشر.

رمز لقراءة من "تيراداتا" (عموما نسخ من 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.أحد يعرف كيف يمكن الحصول على هذا العمل ؟

شكرا

تحرير

السؤال كما ذكر هو في الواقع خطأ.الاعتذار عن عدم تصحيح هذا في وقت سابق.

ما فعلته كان لديك هذا:

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

...تليها صغير قراءة من DB2, ثم تليها رمز لقراءة من "تيراداتا" ، تليها المزيد من التعليمات البرمجية إلى قراءة من DB2.عندما تم تغيير القراءة من "تيراداتا" أولا قبل وجود أي شيء للقيام مع DB2 في كل عمل.

هل كانت مفيدة؟

المحلول

أنا لا أعتقد أن هذا له علاقة مع SYSPRINT أو SYSIN.

أعتقد أنك تحصل على تسو RC = 1, لا سقلكودي = 1 (لأنه لا يوجد سقلكودي 1.

1 تحذير, -1 خطأ.يمكنك أن تبحث هذا الأمر في DB2 برمجة التطبيقات و SQL دليل

بدوره على أثر 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 - يقول '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, , , , ,

على سبيل المثال, يمكن أن يكون ذلك عندما تستخدم معا ، ليس هناك ما يكفي من الذاكرة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top