Как исправить DB2 sqlcode = -805 в скрипте мейнфрейма REXX с подготовкой execsql - PullRequest
0 голосов
/ 12 апреля 2019

Когда я запускаю скрипт REXX:

/* REXX */                                               
CALL CONNIN /* CONNECTION */                             
ADDRESS DSNREXX "EXECSQL DECLARE C1 CURSOR FOR S1"       
IF SQLCODE \= 0 THEN DO                                  
   ERRMSG = "EXECSQL DECLARE"                             
   CALL SQLCA                                             
END                                                      
TTABLE = "ibmuser.dept"                        
SQLSMT = "SELECT * FROM :TTABLE"                         
ADDRESS DSNREXX "EXECSQL PREPARE S1 FROM :SQLSMT"        
IF SQLCODE \= 0 THEN DO                                  
   ERRMSG = "EXECSQL PREPARE"                             
   CALL SQLCA                                             
END                                                      
CALL CLOSING /*CLOSING ALL*/                             
EXIT 0                                                   
/*ROUTINES CALLED*/                                      
/*INITIAL CONNECTION*/                                   
CONNIN:
SSID = "DBCG"                                            
ADDRESS TSO "SUBCOM DSNREXX"                             
IF RC THEN S_RC = RXSUBCOM("ADD","DSNREXX","DSNREXX")    
ADDRESS DSNREXX "CONNECT" SSID                           
IF SQLCODE \= 0 THEN DO                                  
   ERRMSG = "CONNECT TO" SSID "FAILED."                   
   CALL SQLCA                                             
END                                                      
RETURN                                                   
/* ERROR HANDLING ROUTINE */                             
SQLCA:                                                   
SAY " ERROR MSG=  >"ERRMSG"<"                            
SAY " SQLCODE  =  >"SQLCODE"<"                           
SAY " SQLSTATE =  >"SQLSTATE"<"                          
SAY " SQLERRMC =  >"SQLERRMC"<"                          
SAY " SQLERRP  =  >"SQLERRP"<"                           
SAY " SQLERRD.1=  >"SQLERRD.1"<"                         
SAY " SQLERRD.2=  >"SQLERRD.2"<"                         
SAY " SQLERRD.3=  >"SQLERRD.3"<"
SAY " SQLERRD.4=  >"SQLERRD.4"<"                 
SAY " SQLERRD.5=  >"SQLERRD.5"<"                 
SAY " SQLERRD.6=  >"SQLERRD.6"<"                 
EXIT 8                                           
RETURN                                           
/* CLOSING */                                    
CLOSING:
ADDRESS DSNREXX "DISCONNECT"                     
S_RC = RXSUBCOM("DELETE","DSNREXX","DSNREXX") 
RETURN

После запуска я получаю сообщения об ошибках:

ERROR MSG=  >EXECSQL PREPARE<                             
SQLCODE  =  >-805<                                        
SQLSTATE =  >51002<                                       
SQLERRMC =  >DALLASC..DSNREXX.1AB2405808DB7F29:DSNREXX:03<
SQLERRP  =  >DSNXEPM <                                    
SQLERRD.1=  >-251<                                        
SQLERRD.2=  >0<                                           
SQLERRD.3=  >0<                                           
SQLERRD.4=  >-1<                                          
SQLERRD.5=  >0<                                           
SQLERRD.6=  >0<                                           

Ошибка происходит от: ADDRESS DSNREXX "EXECSQL PREPARE S1 FROM: SQLSMT"С помощью SPUFI (утилита db2) я могу перечислить таблицу IBMUSER.DEPT с помощью select * from ibmuser.dept;Как я могу исправить эту проблему?Спасибо

Ответы [ 2 ]

3 голосов
/ 12 апреля 2019

Я бы попробовал

TTABLE = "ibmuser.dept"                        
SQLSMT = "SELECT * FROM" TTABLE  

Ошибка -805 is

-805   DBRM OR PACKAGE NAME location-name.collection-id.dbrm-name.consistency-token NOT FOUND IN PLAN plan-name. REASON 

В полном сообщении будет указано, что DB2 не может найти. Если вы не можете его найти, попробуйте посмотреть в выходных данных вашей работы TSO

0 голосов
/ 18 апреля 2019

Спасибо @ piet.t и @ Брюсу Мартину за предложения.Проблема заключалась в том, что DSNREXX не был включен для публичного использования.

...