GBase 8s
其他
文章
南大通用GBase 8s 之 DBACCNOIGN 环境变量简介
发表于2026-02-25 14:43:39230次浏览9个评论
使用 DBACCNOIGN 环境变量,可以指定在发生指定的错误时 dbaccess的行为。
- 未设置 DBACCNOIGN(默认行为):错误发生前已执行的 SQL 语句会被提交。
- 设置 DBACCNOIGN=1:发生错误时,退出 dbaccess并自动回滚整个未完成的事务。
注:为保证操作连续性,建议不设置此环境变量生效。
实例演示
示例1、未设置 DBACCNOIGN
1、准备数据。
drop table receipts;
drop table customer;
create table receipts(name varchar(20),n1 int);
CREATE TABLE customer (
cust_id SERIAL PRIMARY KEY,
cust_name VARCHAR(50) NOT NULL,
balance DECIMAL(12,2) DEFAULT 0.00,
status CHAR(1) DEFAULT 'A',
create_date DATE,
modify_date DATETIME YEAR TO SECOND
);
INSERT INTO customer (cust_name, balance, create_date, status)
VALUES ('张三', 5000.00, TODAY, 'A');
INSERT INTO customer (cust_name, balance, status) VALUES ('李四', 3000.00, 'A'), ('王五', 8000.00, 'A'),('赵六', 1500.00, 'I');
---查询
> select * from receipts;
name n1
No rows found.
> select * from customer;
cust_id 1
cust_name 张三
balance 5000.00
status A
create_date 2025 12月 31日
modify_date
cust_id 2
cust_name 李四
balance 3000.00
status A
create_date
modify_date
cust_id 3
cust_name 王五
balance 8000.00
status A
create_date
modify_date
cust_id 4
cust_name 赵六
balance 1500.00
status I
create_date
modify_date
4 row(s) retrieved.2、执行以下语句,在事务中进行插入、更新操作。
BEGIN WORK;
INSERT INTO receipts VALUES ('cust1', 10);
INSERT INTO receipt VALUES ('cust1', 20);
INSERT INTO receipts VALUES ('cust1', 30);
UPDATE customer SET status = 'B';
COMMIT WORK;3、查询表数据,如果未在环境中设置 DBACCNOIGN,会将两条记录插入到 receipts 表中,并更新 customer 表的status 字段。
> select * from customer;
cust_id 1
cust_name 张三
balance 5000.00
status B
create_date 2025 12月 31日
modify_date
cust_id 2
cust_name 李四
balance 3000.00
status B
create_date
modify_date
cust_id 3
cust_name 王五
balance 8000.00
status B
create_date
modify_date
cust_id 4
cust_name 赵六
balance 1500.00
status B
create_date
modify_date
4 row(s) retrieved.
> select * from receipts;
name n1
cust1 10
cust1 30
2 row(s) retrieved.示例2 设置 export DBACCNOIGN=1
1、执行以下语句,重新准备数据
dbaccess testdb -
drop table receipts;
drop table customer;
create table receipts(name varchar(20),n1 int);
CREATE TABLE customer (
cust_id SERIAL PRIMARY KEY,
cust_name VARCHAR(50) NOT NULL,
balance DECIMAL(12,2) DEFAULT 0.00,
status CHAR(1) DEFAULT 'A',
create_date DATE,
modify_date DATETIME YEAR TO SECOND
);
INSERT INTO customer (cust_name, balance, create_date, status)
VALUES ('张三', 5000.00, TODAY, 'A');
INSERT INTO customer (cust_name, balance, status) VALUES ('李四', 3000.00, 'A'), ('王五', 8000.00, 'A'),('赵六', 1500.00, 'I');
select * from customer;
select * from receipts;2、执行以下语句,在事务中进行插入、更新操作
BEGIN WORK;
INSERT INTO receipts VALUES ('cust1', 10);
INSERT INTO receipt VALUES ('cust1', 20);
INSERT INTO receipts VALUES ('cust1', 30);
UPDATE customer SET status = 'B';
COMMIT WORK;
如果将 DBACCNOIGN 设置为 1,在执行第二条语句(表名拼写错误:receipt 表不存在)时,会直接报错。并退出dbaccess会话。
3、重新进入库,查看receipt 表没有数据,之前的insert 被回滚 :

设置 DBACCNOIGN 环境变量后,如执行语句有错误,它会直接退出会话。所以不建议设置DBACCNOIGN 环境变量。

以上可见,GBase 8s 的DBACCNOIGN 环境变量 ,未设置该变量时,错误发生前已执行的 SQL 语句会被提交;而设置 DBACCNOIGN=1 时,发生错误会自动回滚整个未完成的事务。根据实际需求选择是否设置此变量,可以更好地控制事务的行为,确保数据的一致性和完整性。
如果在实际应用中遇到任何问题,欢迎随时在社区中提问,我们在这里为你提供支持!
评论
登录后才可以发表评论
路路路发表于 5个月前
环境变量DBACCNOIGN
GBase用户31099发表于 5个月前
1
GBase用户31099发表于 5个月前
2
GBase用户31099发表于 5个月前
3
GBase用户19279发表于 5个月前
学习
GBase用户19279发表于 4个月前
学习~
GBase用户19279发表于 4个月前
学习
崔哥发表于 3个月前
楼上黄昏欲望休,玉梯横绝月中钩。芭蕉不展丁香结,同向春风各自愁。东南日出照高楼,楼上离人唱石州。总把春山扫眉黛,不知供得几多愁?
爱笑的眼睛发表于 2个月前
三人行必有我师
热门帖子
- 12025-12-01浏览数:182763
- 22023-05-09浏览数:25057
- 42023-09-25浏览数:18525
- 52020-05-11浏览数:17528