首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >26ai新特性实战:BOOLEAN 数据类型

26ai新特性实战:BOOLEAN 数据类型

作者头像
胖头鱼的鱼缸
发布2026-07-27 13:14:38
发布2026-07-27 13:14:38
1210
举报

胖头鱼的技术专栏-451 26ai新特性实战:BOOLEAN 数据类型(20260725)

代码语言:javascript
复制
作者:胖头鱼的鱼缸(尹海文)
Oracle ACE Pro: Database
PostgreSQL ACE

10 年 + 数据库行业经验
拥有 OCM 11g/12c/19c、MySQL 8.0 OCP、Exadata、CDP 等认证
墨天轮 MVP,ITPUB 认证专家
圈内拥有“总监”称号,非著名社恐(社交恐怖分子)

全网同名:胖头鱼的鱼缸
ITPUB:yhw1809
除授权转载并标明出处外,均为“非法”抄袭
914fcc7ad57defa7868c3be1ca7fb4f5.jpg
914fcc7ad57defa7868c3be1ca7fb4f5.jpg

特性介绍

Oracle AI Database 23.26.1 引入了原生的 BOOLEAN 数据类型支持。此前 BOOLEAN 类型仅在 PL/SQL 中可用,现在可以直接用于 SQL 表列定义、查询条件和 DML 操作。这使得 Oracle 数据库与 ISO SQL 标准保持一致,同时也方便了从其他数据库系统(如 PostgreSQL)的迁移。

特性细节:

  • BOOLEAN 列可以存储三种值:TRUE、FALSE 和 NULL
  • 在 WHERE 子句中可以直接使用布尔比较:WHERE is_active = TRUE
  • 支持 NOT 运算符取反:WHERE NOT is_active
  • 支持 CASE WHEN 对 BOOLEAN 列进行条件分支
  • 支持 UPDATE 语句对 BOOLEAN 列取反
  • 支持列级别 DEFAULT 值:DEFAULT TRUE / DEFAULT FALSE
  • 支持 IS NULL 和 IS NOT NULL 判断
  • INSERT 时可以使用字面量 TRUE/FALSE/NULL

语法介绍

语法示例:

代码语言:javascript
复制
CREATE TABLE t (id NUMBER, flag BOOLEAN DEFAULT TRUE);
INSERT INTO t VALUES (1, TRUE);
SELECT * FROM t WHERE flag = TRUE;
UPDATE t SET flag = NOT flag WHERE id = 1;

注意事项

  • BOOLEAN 不能直接与数字 0/1 互转,需要使用 CASE 或 DECODE 进行转换
  • 不支持对 BOOLEAN 列进行算术运算
  • BOOLEAN 列不能作为索引键(主键或唯一约束除外)
  • BOOLEAN 类型的显示格式取决于客户端设置

适用场景

  • 状态标记:用户是否激活、记录是否有效、订单是否完成等
  • 业务规则:VIP 客户标记、特殊权限标记、审核状态等
  • 数据迁移:从 PostgreSQL、MySQL 等数据库迁移含布尔列的表
  • 简化查询:替代 NUMBER(1) 或 CHAR(1) 的 Y/N 模式,使代码更可读
  • 条件过滤:使用简洁的 WHERE NOT is_deleted 替代复杂条件

实战演示

同之前一样,使用用户NFTEST,已授权DB_DEVELOPER_ROLE角色,测试操作均在NFTEST用户下执行。

创建测试表并添加测试数据

代码语言:javascript
复制
CREATE TABLE test_bool (
  id NUMBER PRIMARY KEY,
  name VARCHAR2(50),
  is_active BOOLEAN,
  is_vip    BOOLEAN
);

INSERT INTO test_bool VALUES (1, 'Alice', TRUE,  FALSE);
INSERT INTO test_bool VALUES (2, 'Bob',   FALSE, TRUE);
INSERT INTO test_bool VALUES (3, 'Carol', NULL,  NULL);

COMMIT;
image.png
image.png

测试1:SELECT 中使用 BOOLEAN 比较

代码语言:javascript
复制
SELECT id, name, is_active, is_vip
FROM test_bool
WHERE is_active = TRUE
ORDER BY id;
image.png
image.png

测试2:SELECT 中 适用 NOT

代码语言:javascript
复制
SELECT id, name, is_active, is_vip
FROM test_bool
WHERE NOT is_active
ORDER BY id;
image.png
image.png

测试3:在 BOOLEAN 列适用 CASE WHEN

代码语言:javascript
复制
SELECT
  id, name,
  is_active,
  is_vip,
  CASE WHEN is_active THEN 'Active' ELSE 'Inactive' END AS status,
  CASE WHEN is_vip    THEN 'VIP' ELSE 'Regular' END AS tier
FROM test_bool
ORDER BY id;
image.png
image.png

测试4:更新一个否定 BOOLEAN 值

代码语言:javascript
复制
UPDATE test_bool
SET is_active = NOT is_active
WHERE id = 1;

COMMIT;

SELECT id, name, is_active, is_vip
FROM test_bool
WHERE id = 1;
image.png
image.png

测试5:创建包含默认 TRUE 和 FALSE 值的表

代码语言:javascript
复制
CREATETABLE test_bool_defaults (
  id NUMBER PRIMARY KEY,
  name VARCHAR2(50),
  is_enabled    BOOLEAN DEFAULT TRUE,
  is_deleted    BOOLEAN DEFAULT FALSE
);

INSERT INTO test_bool_defaults (id, name) VALUES (1, 'DefaultRow');
INSERT INTO test_bool_defaults (id, name, is_enabled, is_deleted)
VALUES (2, 'OverrideRow', FALSE, TRUE);

COMMIT;

SELECT id, name, is_enabled, is_deleted
FROM test_bool_defaults
ORDER BY id;
image.png
image.png

测试6:在 BOOLEAN 列上使用 IS NULL / IS NOT NULL

代码语言:javascript
复制
SELECT id, name, is_active, is_vip
FROM test_bool
WHERE is_active IS NULL
ORDER BY id;

SELECT id, name, is_active, is_vip
FROM test_bool
WHERE is_active IS NOT NULL
ORDER BY id;

SELECT id, name, is_active, is_vip
FROM test_bool
WHERE is_vip IS NOT NULL
ORDER BY id;
image.png
image.png

总结

本期对 Oracle AI Database 26ai,23.26.1 版本新引入的 BOOLEAN 数据类型进行了完整介绍与实战演示。

老规矩,知道写了些啥。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-07-25,如有侵权请联系 cloudcommunity@tencent.com 删除
目录
  • 胖头鱼的技术专栏-451 26ai新特性实战:BOOLEAN 数据类型(20260725)
    • 特性介绍
    • 语法介绍
    • 注意事项
    • 适用场景
    • 实战演示
      • 创建测试表并添加测试数据
      • 测试1:SELECT 中使用 BOOLEAN 比较
      • 测试2:SELECT 中 适用 NOT
      • 测试3:在 BOOLEAN 列适用 CASE WHEN
      • 测试4:更新一个否定 BOOLEAN 值
      • 测试5:创建包含默认 TRUE 和 FALSE 值的表
      • 测试6:在 BOOLEAN 列上使用 IS NULL / IS NOT NULL
    • 总结
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档