ITPub博客

首页 > 数据库 > Oracle > 胖头鱼的技术专栏-461 26ai新特性实战:INSERT INTO SET(20260814)

胖头鱼的技术专栏-461 26ai新特性实战:INSERT INTO SET(20260814)

原创 Oracle 作者:yhw1809 时间:2026-08-13 19:24:16 0 删除 编辑

胖头鱼的技术专栏-461 26ai新特性实战:INSERT INTO SET(20260814)

作者:胖头鱼的鱼缸(尹海文)
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 引入了 INSERT INTO … SET 语法,使数据插入操作更加灵活和自文档化。开发者可以根据列名称而非位置来指定值,减少因列顺序变化导致的错误。

语法介绍

语法:

INSERT INTO table_name
SET column1 = value1,
    column2 = value2,
    column3 = value3;

特点:

  • 以 key = value 形式显式指定列名和对应值
  • 列的顺序无关紧要,可任意排列
  • 语法类似 MySQL 的 INSERT … SET 语句,便于迁移
  • 自文档化:每条赋值语句清晰表明"什么列赋什么值"
  • 未指定的列使用默认值(DEFAULT 或 NULL)
  • 每次只能插入一行数据

对比与优势

传统写法(依赖列顺序):
  INSERT INTO t (id, name, age) VALUES (1, ‘Alice’, 30);

INSERT INTO SET 写法(列顺序无关):
  INSERT INTO t SET age = 30, name = ‘Alice’, id = 1;

优势:

  • 列顺序无关:无论目标表列顺序如何,都不会出错
  • 自文档化:键值对风格代码一目了然
  • 减少维护错误:列增删改时不易遗漏
  • 迁移友好:方便从 MySQL(INSERT … SET)迁移
  • 部分插入:明确指定哪些列插入,其余使用默认值

适用场景

  • 代码可读性:INSERT INTO SET 的风格使代码更自文档化
  • MySQL 迁移:从 MySQL 迁移应用时,INSERT … SET 语法可直接适配
  • 脚本开发:在定期数据维护脚本中使用 SET 语法提高清晰度
  • 快速原型:在交互式环境中快速插入测试数据
  • 复杂表操作:当表包含大量列时,明确指定部分列的赋值

实战演示

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

创建测试表

CREATE TABLE npi_employees (
  emp_id    NUMBER PRIMARY KEY,
  emp_name  VARCHAR2(100) NOT NULL,
  dept      VARCHAR2(50) DEFAULT 'General',
  salary    NUMBER DEFAULT 0,
  hire_date DATE DEFAULT SYSDATE);

image.png

测试1:所有列

INSERT INTO npi_employeesSET salary   = 50000,
    emp_name = 'Alice',
    hire_date = DATE '2026-01-15',
    emp_id   = 1;
    
commit;
    
SELECT * FROM npi_employees WHERE emp_id = 1;

image.png

测试2:部分列

INSERT INTO npi_employees
SET emp_id   = 2,
    emp_name = 'Bob';
    
commit;
SELECT * FROM npi_employees WHERE emp_id = 2;

image.png

测试3:列顺序变化

INSERT INTO npi_employees
SET hire_date = DATE '2026-02-10',
    emp_id   = 3,
    salary   = 60000,
    dept     = 'Engineering',
    emp_name = 'Carol';
    
commit;
SELECT * FROM npi_employees WHERE emp_id = 3;

image.png

测试4:与传统方式对比

INSERT INTO npi_employees (emp_id, emp_name, dept, salary, hire_date)
VALUES (4, 'Dave', 'Sales', 80000, DATE '2026-03-01');
INSERT INTO npi_employees
SET emp_id   = 5,
    emp_name = 'Eve',
    dept     = 'HR',
    salary   = 45000,
    hire_date = DATE '2026-03-15';
    
commit;
SELECT emp_id, emp_name, dept, salary, hire_date
FROM npi_employeesORDER BY emp_id;

image.png

测试5:代码自文档化

INSERT INTO npi_employees
SET salary   = 70000,
    hire_date = DATE '2026-04-01',
    dept     = 'Finance',
    emp_name = 'Frank',
    emp_id   = 6;
commit;
SELECT emp_id, emp_name, dept, salary, hire_date
FROM npi_employees
WHERE emp_id = 6;

image.png

总结

本期对 Oracle AI Database 26ai,23.26.1 版本新引入的 INSERT INTO SET 进行了完整介绍与实战演示。

老规矩,知道写了些啥。

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

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

注册时间:2017-06-07

  • 博文量
    382
  • 访问量
    400358