Я реализую процедуру DB2 Native SQL. Это первое, что мы попробовали в этом магазине. Я прикрепил код ниже. Что делает эта подпрограмма, так это отслеживает количество новых записей, добавляемых в таблицу по времени. Всякий раз, когда он срабатывает, он либо обновляет запись в таблице мониторинга, либо вставляет запись, если таблица не существует.
Собственные процедуры являются новыми для Z/os db2 версии 9.
В справочнике по процедурам для Z/os db2 v9 говорится: «На рис. 15-15 показаны компоненты DB2, задействованные при вызове собственной процедуры SQL либо из удаленного приложения, либо из подключенной программы DB2, либо из родственного адресного пространства соответственно. Как показано, операторы SQL больше не выполняются во внешнем адресном пространстве WLM, а изначально выполняются в адресном пространстве системных служб базы данных. Для выполнения пакеты процедур загружаются в пул EDM».
Тем не менее, если я удалю из кода строку «WLM ENVIRONMENT FOR DEBUG MODE DSNDSPENV», я получаю сообщение об ошибке, говорящее о том, что «WLM Environment должен быть указан».
Кто-нибудь знает причину, по которой с этим кодом может существовать зависимость от WLM? Нужно ли переопределять WLM_ENVIRONMENT по умолчанию? И если да, то как бы я это сделал?
Новая информация------------------------------------------------ --------
Похоже, что если вы добавите параметр «ОТКЛЮЧИТЬ РЕЖИМ ОТЛАДКИ», вам не потребуется указывать WLM для ОТЛАДКИ.
Что плохого в отключении режима отладки? Есть ли недостаток в том, чтобы оставить процедуру в «РАЗРЕШИТЬ РЕЖИМ ОТЛАДКИ»? Есть ли накладные расходы на использование процедуры, в которой можно разрешить отладку?
--#SET TERMINATOR !
CREATE PROCEDURE $172.VQT_QUOTE_INFO_COUNT_NEW_QUOTE(
IN RATING_STATE CHAR(2),
IN INSERT_TIMESTAMP TIMESTAMP)
LANGUAGE SQL
ALLOW DEBUG MODE
WLM ENVIRONMENT FOR DEBUG MODE DSNDSPENV
BEGIN
DECLARE NO_RECORD_UPDATED INT DEFAULT 0;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'
SET NO_RECORD_UPDATED = 1;
UPDATE $172.VKT_MONITORING_COUNTS
SET MC_QUOTE_CNT = MC_QUOTE_CNT + 1
WHERE MC_STATE_ABBREV = RATING_STATE AND
MC_SAMPLE_DATE = DATE(INSERT_TIMESTAMP) AND
MC_SAMPLE_HOUR = HOUR(INSERT_TIMESTAMP);
IF NO_RECORD_UPDATED = 1 THEN
INSERT INTO $172.VKT_MONITORING_COUNTS (
MC_STATE_ABBREV, MC_SAMPLE_DATE, MC_SAMPLE_HOUR,
MC_QUOTE_CNT, MC_NEW_POLICY_CNT)
VALUES.
(RATING_STATE, DATE(INSERT_TIMESTAMP),
HOUR(INSERT_TIMESTAMP), 1, 0);
END IF;
END.#
--#SET TERMINATOR ;