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

Oracle PL/SQL中如何将逗号分隔的键值对拆分存入表(键值分列存储)

如何将键值对存入Oracle的Key-Value两列表中

嗨,针对你的需求,我会一步步教你怎么把这些键值对拆分成Oracle表的key和data两列存储,每一行对应一个键值对:

第一步:创建目标表

首先你需要先建一张用来存储键值对的表,比如命名为REQUEST_KEY_VALUE。考虑到值的类型有字符串、数值,还有空值,我们把DATA_VALUE设为VARCHAR2类型(如果有超长内容可以换成CLOB),KEY_NAME用来存键名:

CREATE TABLE REQUEST_KEY_VALUE (
    KEY_NAME VARCHAR2(100) NOT NULL, -- 存储键名,长度按需调整
    DATA_VALUE VARCHAR2(4000) -- 存储对应的值,支持字符串、数值转存,空值也能存
);

第二步:插入键值对数据

这里提供两种常用的批量插入方法,选你顺手的就行:

方法1:使用INSERT ALL(推荐,写法简洁)

这种方式可以一次性插入所有键值对,每个键值对对应一个INTO子句:

INSERT ALL
    INTO REQUEST_KEY_VALUE (KEY_NAME, DATA_VALUE) VALUES ('TaskType', 'SRC_Copay')
    INTO REQUEST_KEY_VALUE (KEY_NAME, DATA_VALUE) VALUES ('[BILLING_ACCOUNT_NUMBER]', '3124332')
    INTO REQUEST_KEY_VALUE (KEY_NAME, DATA_VALUE) VALUES ('[TOTAL_DESKTOP_COST]', '11423.1')
    INTO REQUEST_KEY_VALUE (KEY_NAME, DATA_VALUE) VALUES ('[TOTAL_WALKOUT_COST]', '5477.93')
    INTO REQUEST_KEY_VALUE (KEY_NAME, DATA_VALUE) VALUES ('STATUS', 'New Sundry Request')
    INTO REQUEST_KEY_VALUE (KEY_NAME, DATA_VALUE) VALUES ('Requestor', NULL) -- 空值直接用NULL
SELECT 1 FROM DUAL; -- 必须加这句,Oracle要求INSERT ALL后面跟SELECT语句

方法2:使用SELECT ... UNION ALL

如果习惯用查询拼接行的方式,也可以这么写:

INSERT INTO REQUEST_KEY_VALUE (KEY_NAME, DATA_VALUE)
SELECT 'TaskType', 'SRC_Copay' FROM DUAL
UNION ALL
SELECT '[BILLING_ACCOUNT_NUMBER]', '3124332' FROM DUAL
UNION ALL
SELECT '[TOTAL_DESKTOP_COST]', '11423.1' FROM DUAL
UNION ALL
SELECT '[TOTAL_WALKOUT_COST]', '5477.93' FROM DUAL
UNION ALL
SELECT 'STATUS', 'New Sundry Request' FROM DUAL
UNION ALL
SELECT 'Requestor', NULL FROM DUAL;

注意事项

  • 如果你希望保留键名里的方括号(比如[BILLING_ACCOUNT_NUMBER]),直接在KEY_NAME的字符串里带上就行,不需要额外处理;
  • 数值类型的值(比如11423.1)转成字符串存储完全没问题,后续查询时可以用TO_NUMBER()转回数值;
  • 空值的Requestor直接用NULL插入,避免插入空字符串(当然如果业务需要空字符串也可以换成'')。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 16:29:05