news 2026/5/13 2:45:12

达梦 8 数组类型使用测试

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
达梦 8 数组类型使用测试

数组类型的创建

达梦原生并不支持数组类型字段,但是可以使用自定义类型(嵌套表)来实现相似功能。


假设有如下数组字段表结构
CREATE TABLE test_array_types (
id int PRIMARY KEY,
int_array INTEGER[], -- 一维整数数组
text_array TEXT[], -- 一维文本数组
varchar_array VARCHAR(50)[], -- 一维变长字符串数组
multidim_array INTEGER[][] -- 二维整数数组
) ;

那么在达梦中可以创建 4 个自定义数组类型

-- 1. INTEGER[]
CREATE TYPE dm_int_array IS TABLE OF INT;

-- 2. TEXT[]
CREATE TYPE dm_text_array IS TABLE OF TEXT;

-- 3. VARCHAR(50)[]
CREATE TYPE dm_varchar_array IS TABLE OF VARCHAR2(50);

-- 4. NTEGER[][] (二维数组:内层是整数数组,外层是内层数组的集合,集合的每个元素都是一个内层数组)
CREATE TYPE dm_inner_int_array IS TABLE OF INT;
CREATE TYPE dm_multidim_array IS TABLE OF dm_inner_int_array;

使用这四个自定义数组类型创建对应表结构

CREATE TABLE test_array_types (
id INT AUTO_INCREMENT PRIMARY KEY,
int_array dm_int_array, -- 一维整数数组
text_array dm_text_array, -- 一维文本数组
varchar_array dm_varchar_array, -- 一维变长字符串数组
multidim_array dm_multidim_array -- 二维整数数组
);

数组类型的插入

通过下列方式对数组类型字段插入数据

INSERT INTO test_array_types (int_array, text_array, varchar_array, multidim_array)
VALUES (
dm_int_array(1, 2, 3, 4, 5),
dm_text_array('a', 'b', 'c'),
dm_varchar_array('hello', 'world'),
dm_multidim_array(
dm_inner_int_array(1, 2),
dm_inner_int_array(3, 4),
dm_inner_int_array(5, 6)
)
), (
dm_int_array(10, 20, 30, 40),
dm_text_array('test1', 'test2'),
dm_varchar_array('item1', 'item2', 'item3'),
dm_multidim_array(
dm_inner_int_array(1, 2, 3),
dm_inner_int_array(4, 5, 6)
)
);
COMMIT;

查看表中数据

数组类型的查询

对于需要使用下标的查询,可以通过创建自定义函数的方式方便查询

1. 创建获取一维整数数组元素的函数
CREATE OR REPLACE FUNCTION get_int_array_element(
p_array IN dm_int_array,
p_index IN INT
) RETURN INT
AS
v_result INT;
BEGIN
SELECT COLUMN_VALUE INTO v_result
FROM (
SELECT COLUMN_VALUE, ROWNUM AS rn
FROM TABLE(p_array)
)
WHERE rn = p_index;

RETURN v_result;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RETURN NULL;
END;
/

2. 创建获取字符串数据元素函数
CREATE OR REPLACE FUNCTION get_varchar_array_element(
p_array IN dm_varchar_array,
p_index IN INT
) RETURN VARCHAR2
AS
v_result VARCHAR2(50);
BEGIN
SELECT COLUMN_VALUE INTO v_result
FROM (
SELECT COLUMN_VALUE, ROWNUM AS rn
FROM TABLE(p_array)
)
WHERE rn = p_index;

RETURN v_result;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RETURN NULL;
END;
/


3. 创建获取文本数组元素的函数
CREATE OR REPLACE FUNCTION get_text_array_element(
p_array IN dm_text_array,
p_index IN INT
) RETURN TEXT
AS
v_result TEXT;
BEGIN
SELECT COLUMN_VALUE INTO v_result
FROM (
SELECT COLUMN_VALUE, ROWNUM AS rn
FROM TABLE(p_array)
)
WHERE rn = p_index;

RETURN v_result;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RETURN NULL;
END;
/

4. 创建获取二维数组元素的函数
CREATE OR REPLACE FUNCTION get_2d_array_element(
p_array IN dm_multidim_array,
p_row IN INT,
p_col IN INT
) RETURN INT
AS
v_inner_array dm_inner_int_array;
BEGIN
-- 先获取内层数组(第p_row行)
v_inner_array := p_array(p_row);
-- 再获取内层数组中的元素(第p_col列)
RETURN v_inner_array(p_col);
EXCEPTION
WHEN SUBSCRIPT_BEYOND_COUNT OR NO_DATA_FOUND THEN
RETURN NULL;
END;
/

查询结果如下:

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/13 2:44:18

无需复杂配置:Windows 平台OpenClaw v2.7.1部署完整教程

OpenClaw v2.7.1 Windows 极简部署指南|零配置上手本地 AI 智能体 随着本地 AI 自动化工具不断成熟,OpenClaw(小龙虾)凭借轻量化运行、自然语言交互、全场景自动化能力,成为 Windows 平台上手门槛极低的 AI 效率工具&…

作者头像 李华
网站建设 2026/5/13 2:44:08

AI智能体技能库开发指南:从原理到实践

1. 项目概述:一个面向AI智能体的技能库最近在折腾各种AI智能体(Agent)工具,像Claude、Antigravity、OpenClaw这些,发现一个挺有意思的现象:虽然这些工具本身很强大,但很多时候我们想让它们完成一…

作者头像 李华
网站建设 2026/5/13 2:44:07

用过才知道,GEO品牌名声背后真实体验究竟如何?

家人们,现在做企业真的太难了!传统 SEO 效果越来越差,AI 搜索又抢走了大量流量,好多企业根本找不到新的流量入口。而且客户都习惯问 AI 了,自己品牌在大模型里根本搜不到,更别提推荐了。同行都开始做 GEO 语…

作者头像 李华
网站建设 2026/5/13 2:42:07

手机数据导出

在数字信息爆炸的时代,手机早已不仅是通讯工具,更是承载个人记忆、工作文件与生活轨迹的“数字器官”。然而,当意外发生——误删、系统崩溃、硬件损坏——手机数据导出便成为一项技术性极高、且充满情感救赎价值的系统工程。本文将围绕手机数…

作者头像 李华
网站建设 2026/5/13 2:39:05

Git项目太大无法一次性拉取--分支过多版

设分支名为test最小化克隆目标分支 git clone --depth 1 --branch test --no-checkout <仓库地址>检出分支 git checkout test逐渐拉取历史 git fetch --deepen 10 git fetch --deepen 100 git fetch --deepen 500 git fetch --deepen 1000 最后尝试一次性拉全所有剩余历…

作者头像 李华