Я реализую собственную процедуру SQL SQL. Это первое, что мы пробовали в этом магазине. Я приложил код ниже. Что делает эта процедура, так это отслеживать количество новых записей, добавленных в таблицу по времени. Всякий раз, когда он срабатывает, он либо обновляет запись в таблице мониторинга, либо вставляет запись, если таблица не существует.DB2 Z/os Собственные процедуры SQL - Обновлено
Native процедура является новой для Z/OS DB2 версии 9.
Redbook по процедурам Z/OS v9 db2 гласит: «Рисунок 15-15 изображены компоненты DB2, участвующие при вызове процедуры SQL родной либо из удаленного приложения, либо в приложенную к DB2 программу, либо в смежном адресном пространстве . Как показано, операторы SQL больше не выполняются во внешнем WLM адресном пространстве, но изначально в адресном пространстве системных служб базы данных. пакеты процедур загружаются в пул EDM ».
Тем не менее, если я удалю строку «WLM ENVIRONMENT FOR DEBUG MODE DSNDSPENV» из кода, я получаю сообщение об ошибке «WLM Environment».
Кто-нибудь знает причину, по которой зависимость WLM может существовать с помощью этого кода? Нужно ли переопределять значение WLM_ENVIRONMENT? И если да, то как мне это сделать?
Новая информация ----------------------------------------- ---------------
оказывается, что если добавить опцию «DISABLE DEBUG РЕЖИМ» вы не обязаны указывать WLM для DEBUG.
В чем заключается отключение режима отладки? Есть ли недостаток, чтобы оставить процедуру в «ALLOW DEBUG MODE»? Есть ли накладные расходы на использование процедуры, в которой можно отлаживать?
--#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 ;
Отличное описание WLM. В версии 9.1 Z/os DB2 мы можем избежать использования WLM в целом с помощью процедур, создав собственные процедуры. Однако, если вы хотите сделать отладку в какой-то момент, необходимо указать WLM, хотя при нормальной работе он не будет использоваться. В некоторых средах включение отладки означает, что дополнительная информация должна храниться в таблице символов, и у вас слегка раздутый код с незначительным воздействием на производительность. Включает ли отладка в DB2 какие-либо недостатки для собственных процедур? – dsiewert