如何使用execsql prepare在REXX主机脚本中修复DB2 sqlcode = -805

问题描述 投票:0回答:2

当我运行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实用程序)我可以使用select * from ibmuser.dept列出表IBMUSER.DEPT;我该如何解决这个问题?谢谢

db2 mainframe rexx
2个回答
3
投票

我会尝试

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

错误-805

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

完整的消息将告诉您DB2无法找到的内容。如果找不到,请尝试查看TSO作业输出


0
投票

感谢@ piet.t和@ bruce-martin的建议。问题是因为DSNREXX未启用公共用途。

© www.soinside.com 2019 - 2024. All rights reserved.