我正在实现一个 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 默认值?如果是这样,我该怎么做?
新的信息 - - - - - - - - - - - - - - - - - - - - - - - - --------
如果您添加选项“禁用调试模式”,您似乎不需要为调试指定 WLM。
禁用调试模式有什么缺点?将程序留在“允许调试模式”中是否有任何不利之处?使用允许调试的过程是否有开销?
--#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 ;