DM8数据库DIsql工具:WHENEVER命令详解


🌺The Begin🌺点点关注,收藏不迷路🌺

一、WHENEVER命令概述

在达梦数据库的DIsql工具中,WHENEVER命令是管理SQL错误处理的强大工具。它允许开发者预先定义当SQL语句执行出错时的处理策略,极大地提高了脚本的健壮性和自动化程度。

二、基本语法结构

WHENEVER命令的基本语法如下:

WHENEVER SQLERROR 
  CONTINUE [ COMMIT | ROLLBACK | NONE ] |
  EXIT [ SUCCESS | FAILURE | WARNING | n | <variable> | : <bindvariable> ] [ COMMIT | ROLLBACK ]

三、参数详解

1. 处理方式选项

  • CONTINUE:遇到错误继续执行

    • COMMIT:继续前提交当前事务
    • ROLLBACK:继续前回滚当前事务
    • NONE:不处理事务直接继续(默认)
  • EXIT:遇到错误退出DIsql

    • 退出状态码可选:
      • SUCCESS:以成功状态退出(0)
      • FAILURE:以失败状态退出(1)
      • WARNING:以警告状态退出(2)
      • 具体数字或变量

2. 事务控制选项

  • COMMIT:退出前提交事务
  • ROLLBACK:退出前回滚事务

四、实际应用示例

示例1:简单错误继续

WHENEVER SQLERROR CONTINUE;
SELECT * FROM MYDMDB.department;    ---不存在的表;
SELECT * FROM MYDMDB.departments;  -- 这行仍会执行

示例2:错误时回滚并退出

-- 设置错误处理方式:遇到SQL错误时回滚事务并退出
WHENEVER SQLERROR EXIT ROLLBACK;

-- 创建测试表(如果不存在)
CREATE TABLE IF NOT EXISTS account (
    id INT PRIMARY KEY,
    name VARCHAR(50),
    balance DECIMAL(10,2)
);

CREATE TABLE IF NOT EXISTS transaction_log (
    id INT PRIMARY KEY,
    account_id INT,
    amount DECIMAL(10,2),
    trans_date DATETIME
);

-- 清空测试数据(仅用于演示)
TRUNCATE TABLE account;
TRUNCATE TABLE transaction_log;

-- 初始化账户数据
INSERT INTO account VALUES(1, '张三', 1000.00);
INSERT INTO account VALUES(2, '李四', 500.00);

-- 开始事务(在达梦中默认自动提交是关闭的)
BEGIN;

-- 模拟转账业务:张三向李四转账200元
-- 1. 从张三账户扣款
UPDATE account SET balance = balance - 200 WHERE id = 1;

-- 2. 记录交易日志(故意使用无效数据导致错误)
INSERT INTO transaction_log VALUES(1, 1, -200, SYSDATE);
INSERT INTO transaction_log VALUES(2, 2, 200, '无效日期格式');  -- 这里会出错

-- 3. 向李四账户加款(这行不会执行,因为上面已经出错)
UPDATE account SET balance = balance + 200 WHERE id = 2;

-- 提交事务(只有所有操作成功才会执行到这里)
COMMIT;

-- 查询结果(正常情况下不会执行到这里)
SELECT * FROM account;
SELECT * FROM transaction_log;

在这里插入图片描述

示例3:自定义退出码

WHENEVER SQLERROR EXIT 100;
SELECT * FROM MYDMDB.department;    ---不存在的表;
-- 退出后可通过echo $?(Linux)或echo %ERRORLEVEL%(Windows)查看返回码

在这里插入图片描述

五、总结

WHENEVER命令是达梦数据库DIsql工具中异常处理的利器,特别适合:

  • 自动化部署脚本
  • 批处理作业
  • 无人值守任务
  • CI/CD流程中的数据库操作

合理使用WHENEVER命令可以显著提高数据库脚本的可靠性和可维护性,是每位达梦数据库开发者应该掌握的技能。

在这里插入图片描述


🌺The End🌺点点关注,收藏不迷路🌺
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Seal^_^

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值