使用select 调用函数时,因为函数定义里面有涉及DML语句,因此执行报错-7145:无法在查询中执行DM操作。使用call虽然可正常调用函数,但是无法获取返回的函数结果。
修改函数定义,在AS后面增加
PRAGMA AUTONOMOUS_TRANSACTION;
改为自治事务函数后可使用select调用,执行时再次遇到报错,最终修改函数里面dml语句后增加commit提交后解决。
修改后函数定义如下:
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;
文章
阅读量
获赞
