达梦 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 INTASv_result INT;BEGINSELECT COLUMN_VALUE INTO v_resultFROM (SELECT COLUMN_VALUE, ROWNUM AS rnFROM TABLE(p_array))WHERE rn p_index;RETURN v_result;EXCEPTIONWHEN NO_DATA_FOUND THENRETURN NULL;END;/2. 创建获取字符串数据元素函数CREATE OR REPLACE FUNCTION get_varchar_array_element(p_array IN dm_varchar_array,p_index IN INT) RETURN VARCHAR2ASv_result VARCHAR2(50);BEGINSELECT COLUMN_VALUE INTO v_resultFROM (SELECT COLUMN_VALUE, ROWNUM AS rnFROM TABLE(p_array))WHERE rn p_index;RETURN v_result;EXCEPTIONWHEN NO_DATA_FOUND THENRETURN NULL;END;/3. 创建获取文本数组元素的函数CREATE OR REPLACE FUNCTION get_text_array_element(p_array IN dm_text_array,p_index IN INT) RETURN TEXTASv_result TEXT;BEGINSELECT COLUMN_VALUE INTO v_resultFROM (SELECT COLUMN_VALUE, ROWNUM AS rnFROM TABLE(p_array))WHERE rn p_index;RETURN v_result;EXCEPTIONWHEN NO_DATA_FOUND THENRETURN 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 INTASv_inner_array dm_inner_int_array;BEGIN-- 先获取内层数组第p_row行v_inner_array : p_array(p_row);-- 再获取内层数组中的元素第p_col列RETURN v_inner_array(p_col);EXCEPTIONWHEN SUBSCRIPT_BEYOND_COUNT OR NO_DATA_FOUND THENRETURN NULL;END;/查询结果如下