Процедуры встроенного SQL в DB2 Z / os - обновлено - PullRequest
0 голосов
/ 04 ноября 2010

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

1 Ответ

0 голосов
/ 05 ноября 2010

WLM означает Диспетчер рабочей нагрузки.

Диспетчер рабочей нагрузки (входящий в состав базовой z / OS) отвечает за выделение памяти и других ресурсов и выполнение сценария.

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

...