2010-11-04 2 views
0

Я реализую собственную процедуру 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 ;    

ответ

0

WLM означает менеджер рабочей нагрузки.

Менеджер рабочей нагрузки (который является частью базового z/OS) отвечает за выделение памяти и других ресурсов и запуск вашего скрипта.

Каждая среда WLM будет запускать скрипты с разными приоритетами и иметь свои собственные настройки для максимального времени запуска, максимального потребления процессора и собственного набора правил, по которым можно получить доступ к ресурсам.

+0

Отличное описание WLM. В версии 9.1 Z/os DB2 мы можем избежать использования WLM в целом с помощью процедур, создав собственные процедуры. Однако, если вы хотите сделать отладку в какой-то момент, необходимо указать WLM, хотя при нормальной работе он не будет использоваться. В некоторых средах включение отладки означает, что дополнительная информация должна храниться в таблице символов, и у вас слегка раздутый код с незначительным воздействием на производительность. Включает ли отладка в DB2 какие-либо недостатки для собственных процедур? – dsiewert