DB2 ネイティブ SQL プロシージャーを実装しています。当店では初めての試みです。以下のコードを添付しました。このルーチンが行うことは、時間ごとにテーブルに追加された新しいレコードの数を追跡することです。起動するたびに、監視テーブルのレコードを更新するか、テーブルが存在しない場合はレコードを挿入します。
ネイティブ プロシージャは、Z/os db2 バージョン 9 の新機能です。
Z/os db2 v9 のプロシージャに関するレッドブックには次のように書かれています。 SQL ステートメントは外部 WLM アドレス空間では実行されなくなりましたが、データベース システム サービスのアドレス空間でネイティブに実行されます。実行のために、プロシージャ パッケージは EDM プールにロードされます。
それでも、「WLM ENVIRONMENT FOR DEBUG MODE DSNDSPENV」という行をコードから削除すると、「WLM 環境を指定する必要があります」というエラーが表示されます。
このコードに WLM 依存関係が存在する理由を知っている人はいますか? WLM_ENVIRONMENT のデフォルトをオーバーライドする必要がありますか? もしそうなら、どうすればいいですか?
新情報 - - - - - - - - - - - - - - - - - - - - - - - - --------
オプション「DISABLE DEBUG MODE」を追加すると、DEBUG に WLM を指定する必要がないようです。
デバッグモードを無効にすることの欠点は何ですか? 「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 ;