注册
-7145:无法在查询中执行DM操作报错处理记录
技术分享/ 文章详情 /

-7145:无法在查询中执行DM操作报错处理记录

### 2025/12/31 112 0 0

问题描述:

使用select 调用函数时,因为函数定义里面有涉及DML语句,因此执行报错-7145:无法在查询中执行DM操作。使用call虽然可正常调用函数,但是无法获取返回的函数结果。
07495d87ee1c56929eb6efea471a7548.png

处理方式:

修改函数定义,在AS后面增加
PRAGMA AUTONOMOUS_TRANSACTION;
改为自治事务函数后可使用select调用,执行时再次遇到报错,最终修改函数里面dml语句后增加commit提交后解决。
f569397449d9f8964a73f567850ceafc.png

修改后函数定义如下:

CREATE OR REPLACE FUNCTION HIS.SEQUENCE_DAY_CURRVAL(
    org_d VARCHAR(64), 
    seq_name VARCHAR(50), 
    seq_days VARCHAR(50)
) 
RETURN INTEGER
AS
	PRAGMA AUTONOMOUS_TRANSACTION; 
    v_value INTEGER;
    v_counts INTEGER;
BEGIN
    v_counts := 0;
    v_value := 0;
    
    -- 使用大写列名(假设表中列名是大写)
    SELECT COUNT(CURRENT_VALUE) INTO v_counts 
    FROM HIS.SEQUENCE_DAY 
    WHERE NAME = seq_name 
      AND DAYS = seq_days 
      AND ORG_ID = org_d;
    
    IF v_counts = 0 THEN
        INSERT INTO HIS.SEQUENCE_DAY (NAME, DAYS, CURRENT_VALUE, INCREMENT, ORG_ID) 
        VALUES (seq_name, seq_days, 1, 1, org_d);
	commit;
    END IF;
    
    SELECT CURRENT_VALUE INTO v_value 
    FROM HIS.SEQUENCE_DAY 
    WHERE NAME = seq_name 
      AND DAYS = seq_days 
      AND ORG_ID = org_d;
    
    RETURN v_value;
END;
评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服