#db2 #mainframe #rexx
#db2 #мэйнфрейм #rexx
Вопрос:
Когда я запускаю сценарий 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<
Ошибка возникает из: АДРЕС DSNREXX «EXECSQL ПОДГОТАВЛИВАЕТ S1 ИЗ: SQLSMT»
С помощью SPUFI (утилита db2) Я могу перечислить таблицу IBMUSER.ОТДЕЛ с помощью select * из ibmuser.dept;
Как я могу исправить эту проблему?
Спасибо
Комментарии:
1. -805 всегда означает, что план привязан неправильно или содержащиеся в нем пакеты имеют неправильную версию (например, не обновлены). Поскольку в вашем случае речь идет о DSNREXX-пакете, который должен поддерживаться вашими системами -ребята, вам следует связаться с ними и попросить их исправить проблему,
Ответ №1:
Я бы попробовал
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
Комментарии:
1. Я попробовал ваше предложение, но все та же ошибка. В соответствии со списком таблиц SQLSTATE с sqlstate = 51002 ошибка заключается в том, что «Пакет, соответствующий запросу выполнения инструкции SQL, не найден. -805». Для меня объясненная ошибка не имеет ничего общего с именем таблицы, скорее с действием ПОДГОТОВКИ и его версией пакета, что вы думаете?
2. Возможно, у вас нет доступа к пакету по умолчанию или он может быть не настроен. Узнайте, как называется пакет, и поговорите с администратором базы данных
Ответ №2:
Спасибо @piet.t и @bruce-martin за предложения. Проблема заключалась в том, что DSNREXX не был включен для общедоступного использования.