您好,我是小DAI,专注于数据库管理员相关的技术问答,请问有什么可以帮您?

一致的标量函数结果

过程(或匿名块)中使用的隐式 SELECT 语句在过程完成后执行,标量用户定义的函数 (SUDF) 在 SELECT 语句的读取时进行评估,因为设计了后期实现。为避免出现超出过程或 SUDF 中语句快照顺序的语句的意外结果,现在将实例化隐式结果集,以防 SUDF 引用持久表。

CREATE TABLE t1(C1 VARCHAR(20));

CREATE FUNCTION my_count RETURNS v_result INTEGER AS

BEGIN

SELECT COUNT(*) INTO v_result FROM t1;

END;

CREATE PROCEDURE proc_insert_delete AS

BEGIN

INSERT INTO t1 VALUES ('test');

SELECT 'TRACE 1: COUNT AFTER INSERT', COUNT(*) FROM t1;

SELECT 'TRACE 2: COUNT DURING FUNCTION CALL', my_count() FROM DUMMY;

DELETE FROM t1;

SELECT 'TRACE 3: COUNT AFTER DELETE', COUNT(*) FROM t1;

COMMIT;

END;

CALL proc_insert_delete;

-- ('TRACE 1: COUNT AFTER INSERT', 1),

-- ('TRACE 2: COUNT DURING FUNCTION CALL', 1),

-- ('TRACE 3: COUNT AFTER DELETE', 0),