Использование exit sql.sqlcode
может вводить в заблуждение или даже опасно.
С Проект документации Linux :
Выход за пределы диапазона может привести кнеожиданные коды выхода.Значение выхода больше 255 возвращает код выхода по модулю 256. Например, выход 3809 дает код выхода 225 (3809% 256 = 225).
Вы видите код выхода, сообщенный как174, но исходный код ошибки мог быть любым, где mod(<actual code>, 256)
оценивается как 174. Вы сможете увидеть действительный код ошибки и сообщение в вашей переменной $Result
.
Вероятным кандидатом являетсяОшибка ORA-00942 (как mod(942, 256)
равно 174) - и, как вы сказали, слияние работает автономно, вы, вероятно, обнаружите, что пользователь, к которому вы подключаетесь и выполняете слияние, представленное $TgtUsrID
, делаетне иметь необходимых привилегий для таблиц, принадлежащих FSG
и / или FSG_WRK
.
Это показывает, что сообщенный код завершения может вводить в заблуждение или вводить в заблуждение.Потенциально опасная часть, если вы получите реальный код ошибки, который является точным кратным 256, например, допустимая квота пробела ORA-01536 "превышена для табличного пространства% s '. Поскольку mod(1536, 256)
равно нулю, $ERRORCODE
будет равно нулютоже, поэтому ваша проверка:
if [ $ERRORCODE != 0 ]
будет ложной, даже если ошибка действительно произошла.
Возможно, будет проще изменить ваш SQL на whenever sqlerror exit failure
(возможно, с добавлениемиз rollback
?), и тогда ваша проверка на ненулевое значение сработает, и вы можете использовать $Result
, чтобы увидеть / сообщить, что было на самом деле неправильно.