Отладка сеанса DB2

Я просто неудачная отладка проблемы iSeries/RPG/SQL... (я не эксперт по RPG)

У меня есть программа, которая содержит временные таблицы, объявленные в DB2 на iSeries. Временные таблицы объявляются в сеансе, поэтому, когда я запускаю приложение и отлаживаю RPG через терминал в iSeries (я предполагаю, что это правильная терминология?) В любом случае, я фактически нахожусь в двух разных сеансах.

SQL, на который я смотрю, делает что-то вроде этого...

select blah from SESSION/#temp_table left join #real_table left join _to_many_other_tables

Хотя я могу нормально запросить "реальную таблицу", я не вижу содержимого таблицы SESSION... так как бы я мог запросить таблицу в другом сеансе?? Предположительно, SESSION/#temp_table - это то, что я мог бы запросить, выполнив что-то вроде select * from 123123/#temp_table, но как узнать, как выглядит другой идентификатор сеанса id/name/variable/access token?

1 ответ

Решение

Вы можете использовать STRSRVJOB для отладки другой работы, но это, вероятно, не позволит вам запросить QTEMP этой работы. Традиционно программисты среднего уровня отлаживают подобные задания в интерактивном режиме. Войдите в сеанс зеленого экрана и назовите программу, которую вы хотите отладить.

Между STRDBG, STRISDB, системным отладчиком и средством SEP, найденным в RDi, существует много вариантов решения проблемы отладки. Кроме того, DBG400 с открытым исходным кодом может быть на что посмотреть.

РЕДАКТИРОВАТЬ: проблема сложная. Похоже, это приложение типа клиент / сервер. При написании такого приложения я обычно включаю в него переключатель отладки, чтобы можно было регистрировать, что происходит в целях отладки. Хранимые процедуры в DB2 for i могут быть реализованы исключительно в SQL, или они могут вызывать RPG, подобный HLL, для реализации.

Если ваши SP внешние, скажем, RPG, то добавьте некоторый код, который будет копировать временные файлы в реальную библиотеку в системе. Реализация его как вызов system() или QCMDEXC не слишком навязчива для существующего программного кода. Вы можете включать и выключать его с областью данных - опять же, очень ненавязчиво, но вы можете установить состояние отладки извне приложения.

Если ваши SP являются SQL, я бы изменил их, чтобы записать дубликат временного файла в реальной библиотеке. Допустим, есть CREATE TABLE QTEMP/TEMP001 с данными... Добавить CREATE TABLE DEBUGLIB/TEMP001 с данными... Если вы хотите, вы можете ввести этот дополнительный код в специальный профиль пользователя для отладки, хотя для этого могут потребоваться некоторые данные. изменения безопасности на стороне IBM i.

Другие вопросы по тегам