Я реализую процедуру 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».
Кто-нибудь знает причину, по которой в этом коде может существовать зависимость WLM? Нужно ли переопределить WLM_ENVIRONMENT по умолчанию? И если так, как бы я это сделал?
Новая информация --------------------------------------------- -----------
Похоже, что если вы добавите опцию «DISABLE DEBUG MODE», вам не нужно будет указывать WLM для DEBUG.
В чем недостаток отключения режима отладки? Есть ли недостаток в том, чтобы оставить процедуру в «РАЗРЕШИТЬ РЕЖИМ ОТЛАДКИ»? Есть ли издержки на использование процедуры, в которой разрешена отладка?
--#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 ;