注册

dm无法在查询中执行DML操作

坏坏 2022/08/08 1173 2

【DM版本】:v8
【操作系统】:
【CPU】:
【问题描述】*:
函数如下:

CREATE OR REPLACE FUNCTION "FSP"."WDC"("SEQNAME" IN VARCHAR(32767))
RETURN VARCHAR(32767)
AUTHID DEFINER
 AS
                seq_rules  VARCHAR;
                seq_length INT;
                seq_max BIGINT;
                seq_date_fmt  VARCHAR;
                max_id_length INT;
                max_id        VARCHAR;
                len           INT;
        BEGIN
        		UPDATE seq set max = max + next WHERE name = seqname;
        		commit;
                SELECT
                        rules ,
                        length,
                        max   ,
                        date_fmt
                INTO
                        seq_rules ,
                        seq_length,
                        seq_max   ,
                        seq_date_fmt
                FROM
                        seq
                WHERE
                        name      = seqname;
                SET max_id        = seq_max;
                SET max_id_length = CHARACTER_LENGTH(max_id);
                SET len           = seq_length - max_id_length;
                --长度不够补0
                WHILE len > 0
                LOOP
                        SET max_id = CONCAT(0, max_id);
                        SET len    = len - 1;
                END LOOP;
                --替换规则
                IF seq_rules         IS NOT NULL AND INSTR(seq_rules, '###max_id###') > 0 THEN
                        SET seq_rules = REPLACE(seq_rules, '###max_id###', max_id);
                        SET max_id    = seq_rules;
                END IF;
                IF seq_rules      IS NOT NULL AND INSTR(seq_rules, '###date###') > 0 AND seq_date_fmt IS NOT NULL THEN
                        SET max_id = REPLACE(seq_rules, '###date###', DATE_FORMAT(NOW(), seq_date_fmt));
                END IF;
                return max_id;
        END;

执行SELECT WDC(‘SH22’),报错:无法在查询中执行DML操作。
函数不能带update语句吗?那该如何修改?

回答 0
暂无回答
扫一扫
联系客服