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

金仓数据库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

更多信息,参见https://help.kingbase.com.cn/v8/index.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值