人大金仓 金仓数据库KingbaseES函数支持事务介绍

268 阅读2分钟

金仓数据库KingbaseES函数支持事务介绍

关键字:

KingbaseES、函数、commit、rollback、

1.事务处理和控制

事务处理是 KingbaseES 数据库的一项功能,它允许多个用户同时处理数据库,并确保每个用户看到一致的数据版本,并且所有更改都以正确的顺序执行。

KingbaseES 数据库中事务是一个最小的执行单元。一个事务可以是一个SQL语句也可以是多个SQL语句。一个事务中的语句要么全部执行,要么全不执行。

COMMIT语句结束当前事务,使其更改永久且对其他用户可见。

ROLLBACK 语句结束当前事务并撤销在该事务期间所做的任何更改。

2.PLSQL函数支持事务

KES兼容ORACLE的函数支持事务功能,对PLSQL函数进行功能增强,带事务的函数可用于PLSQL语句表达式中如:赋值语句、条件语句、while循环条件表达式、for …loop的迭代器范围表达式等,同时自治事务函数也支持事务操作。

2.1 PLSQL函数在PLSQL语句中支持事务操作

示例:带事务的函数用于赋值语句,可正常调用成功

create table t1(id int,name varchar(30));
\set SQLTERM /
CREATE OR REPLACE FUNCTION func1 RETURN INT AS
BEGIN
    INSERT INTO t1 VALUES(1,'kingbase');
    COMMIT;
    RETURN 5;
END;
/

DECLARE
    v1 int;
BEGIN
    v1 :=func1();
    DBMS_OUTPUT.PUT_LINE(v1);
END;
/

\set SQLTERM ;
SELECT * FROM t1;

file

2.2带AUTHID属性的函数支持事务操作

PLSQL函数有AUTHID CURRENT_USER的属性,支持事务操作。

示例:
\set SQLTERM /
CREATE OR REPLACE FUNCTION func1 RETURN INT AUTHID CURRENT_USER  AS
BEGIN
        INSERT INTO t1 VALUES(1,'kingbase');
        COMMIT;
        RETURN 5;
END;
/
DECLARE
        v1 int;
BEGIN
        v1 :=func1();
END;
/
\set SQLTERM ;
SELECT * FROM t1;

file

2.3自治事务函数支持事务操作

KingbaseES 自治事务的函数包含事务操作时可正常执行,具体用法如下:

--创建测试用表
\set SQLTERM ;
CREATE TABLE t1(id int,name varchar(50));
--创建自治事务函数包含commit和rollback操作,可成功创建
\set SQLTERM /
CREATE OR REPLACE FUNCTION func_test RETURN int AS
PRAGMA AUTONOMOUS_TRANSACTION;
i int :=10;
BEGIN
	insert into t1 values(i,'test in at');
	ROLLBACK;
	insert into t1 values(20,'test in at2');
	COMMIT;
	return i;
END;
/

file

--匿名块调用自治事务函数,自治事务函数中的事务语句rollback,不影响主事务的dml语句,主事务中的insert语句正常插入数据(1,'test in main'),匿名块执行结束后表t1中插入两条数据
DECLARE
	v1 int;
BEGIN
	insert into t1 values(1,'test in main');
	v1 :=func_test();
END;
/
\set SQLTERM ;
select * from t1;

file

更多信息,参见help.kingbase.com.cn/v8/index.ht…