You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL中ASSERT的实用示例请求:断言指定查询行数为10

我太懂这种翻遍文档找不到简单示例的难受了!不同数据库对断言的实现差异不小,我给你几个主流数据库的可运行示例,直接复制就能测试:

PostgreSQL 原生ASSERT示例

PostgreSQL原生支持ASSERT命令,你可以用匿名代码块来实现断言逻辑:

-- 1. 创建测试表(如果不存在)
CREATE TABLE IF NOT EXISTS my_table (
    id SERIAL PRIMARY KEY,
    my_col INT
);

-- 2. 插入10条my_col=3的数据,再加2条其他数据做测试
INSERT INTO my_table (my_col)
VALUES (3), (3), (3), (3), (3), (3), (3), (3), (3), (3), (1), (2);

-- 3. 执行断言:验证my_col=3的行数等于10
DO $$
DECLARE
    row_count INT;
BEGIN
    -- 先获取查询行数
    SELECT COUNT(*) INTO row_count FROM my_table WHERE my_col = 3;
    -- 断言:如果行数不等于10,抛出错误
    ASSERT row_count = 10, '查询行数不符合预期!预期10行,实际' || row_count || '行';
END $$;

如果断言失败(比如你把插入的3改成9条),脚本会直接抛出错误:ERROR: 查询行数不符合预期!预期10行,实际9行,后续代码不会执行。

MySQL 自定义断言实现

MySQL没有原生的ASSERT命令,但可以用SIGNAL结合存储过程实现类似效果:

-- 1. 创建测试表
CREATE TABLE IF NOT EXISTS my_table (
    id INT AUTO_INCREMENT PRIMARY KEY,
    my_col INT
);

-- 2. 插入测试数据
INSERT INTO my_table (my_col)
VALUES (3), (3), (3), (3), (3), (3), (3), (3), (3), (3), (4), (5);

-- 3. 创建断言存储过程
DELIMITER //
CREATE PROCEDURE assert_my_table_row_count()
BEGIN
    DECLARE row_count INT;
    SELECT COUNT(*) INTO row_count FROM my_table WHERE my_col = 3;
    -- 如果行数不符合预期,抛出自定义错误
    IF row_count != 10 THEN
        SIGNAL SQLSTATE '45000' 
        SET MESSAGE_TEXT = CONCAT('查询行数不符合预期!预期10行,实际', row_count, '行');
    END IF;
END //
DELIMITER ;

-- 4. 执行断言
CALL assert_my_table_row_count();

断言失败时,会返回错误信息:Error Code: 1644. 查询行数不符合预期!预期10行,实际9行。

SQL Server 断言实现

SQL Server可以用THROW语句来抛出断言错误:

-- 1. 创建测试表
CREATE TABLE IF NOT EXISTS my_table (
    id INT IDENTITY(1,1) PRIMARY KEY,
    my_col INT
);

-- 2. 插入测试数据
INSERT INTO my_table (my_col)
VALUES (3), (3), (3), (3), (3), (3), (3), (3), (3), (3), (6), (7);

-- 3. 执行断言逻辑
DECLARE @row_count INT;
SELECT @row_count = COUNT(*) FROM my_table WHERE my_col = 3;

IF @row_count != 10
BEGIN
    -- 抛出自定义错误:错误号50001是用户自定义范围的错误号
    THROW 50001, '查询行数不符合预期!预期10行,实际行数不对', 1;
END

断言失败时,会抛出错误:Msg 50001, Level 16, State 1, Line 14 查询行数不符合预期!预期10行,实际行数不对,脚本终止执行。

内容的提问来源于stack exchange,提问作者rxmnnxfpvg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:18:19