金仓数据库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;
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;
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;
/
--匿名块调用自治事务函数,自治事务函数中的事务语句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;