ITPub博客

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

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

原创 Oracle 作者:yhw1809 时间:2026-07-25 16:00:31 0 删除 编辑

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

作者:胖头鱼的鱼缸(尹海文)
Oracle ACE Pro: Database
PostgreSQL ACE
10 年 + 数据库行业经验
拥有 OCM 11g/12c/19c、MySQL 8.0 OCP、Exadata、CDP 等认证
墨天轮 MVP,ITPUB 认证专家
圈内拥有“总监”称号,非著 名社恐(社交恐怖分子)
全网同名:胖头鱼的鱼缸
ITPUB:yhw1809
除授权转载并标明出处外,均为“非法”抄袭

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

语法介绍

语法示例:

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用户下执行。

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

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

测试1:SELECT 中使用 BOOLEAN 比较

SELECT id, name, is_active, is_vip
FROM test_bool
WHERE is_active = TRUE
ORDER BY id;

image.png

测试2:SELECT 中 适用 NOT

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

image.png

测试3:在 BOOLEAN 列适用 CASE WHEN

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

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

UPDATE test_boolSET is_active = NOT is_active
WHERE id = 1;
COMMIT;
SELECT id, name, is_active, is_vip
FROM test_boolWHERE id = 1;

image.png

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

CREATE TABLE 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

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

SELECT id, name, is_active, is_vipFROM test_boolWHERE is_active IS NULLORDER BY id;SELECT id, name, is_active, is_vipFROM test_boolWHERE is_active IS NOT NULLORDER BY id;SELECT id, name, is_active, is_vipFROM test_boolWHERE is_vip IS NOT NULLORDER BY id;

image.png

总结

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

老规矩,知道写了些啥。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31466763/viewspace-3176760/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2017-06-07

  • 博文量
    383
  • 访问量
    401704