Если ваш Db2-сервер работает в Linux / Unix / Windows, вы можете использовать функцию DBMS_OUT.PUT_LINE для отправки диагностического вывода из подпрограмм SQL на консоль. Идея состоит в том, что в вашей подпрограмме вы присваиваете переменной некоторый текст (например, имя таблицы и ее количество), а затем вызываете DBMS_OUTPUT.PUT_LINE (...), чтобы этот текст появлялся на консоли. Недостаток этого подхода заключается в том, что выходные данные появятся только после завершения процедуры. Это часто не то, что вам нужно, иногда вы хотите видеть количество строк по мере их появления, поэтому вместо этого рассмотрите альтернативные подходы, как показано ниже.
Чтобы увидеть вывод DBMS_OUTPUT.PUT_LINE с Db2 CLP (илиdb2cmd.exe) сначала нужно использовать set serveroutput on
перед вызовом процедуры.
Но для таких простых вещей, как эта, хранимая процедура может быть неподходящей, потому что вы можете использовать CLP для выполнения работы в два этапапосле подключения к базе данных. Это часто более удобно для сценариев. Идея состоит в том, что вы создаете файл для генерации запросов, который при запуске с CLP создает второй файл, и вы выполняете второй файл для получения желаемых результатов.
Пример
Создатьфайл gen_counts.sql
, содержащий запрос, который генерирует реальные запросы, например, gen_counts.sql, может содержать
select 'select count(*) from '||rtrim(tabschema)||'.'||rtrim(tabname)||' with ur;'
from syscat.tables;
Затем вы можете выполнить следующие действия:
db2 connect to $database
db2 -txf gen_counts.sql > count_queries.sql
db2 -tvf count_queries.sql > count_results.txt
Обратите внимание, что выходной файл (в данном случае count_results.txt
) доступен для чтения через другой сеанс оболочки, пока скрипт продолжает работать. При необходимости вы также можете направить вывод в параллельные задания.
Однако опытные администраторы баз данных могут избежать подсчета строк во всех таблицах таким способом и вместо этого могут предпочесть убедиться, что runstats всегда обновлены длявсех таблиц и принимают последние оценки количества строк, которые отображаются в SYSCAT.TABLES.CARD после завершения выполнения runstats. Если статистика актуальна, счет КАРТЫ часто достаточно хорош для многих целей. Если требуются точные значения, они часто действительны только для определенной временной отметки, если база данных активна.