为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】: v8
【操作系统】:linux
【CPU】: x86
【问题描述】*:两个定义了VARRAY 类型的变量,如何拼接在一起
CREATE OR REPLACE TYPE string_array IS VARRAY(10) OF VARCHAR;
然后 有 a1 和 a2 都是string_array 类型,怎么把 a1 和 a2 拼接在一起得到 a3 ,含有 a1 和 a2的 数据
用循环试试看吧,或许还有更简便的办法,但我从文档里没查到
方式一,直接拼接:
DECLARE
TYPE STR_ARRAY IS VARRAY(10) OF VARCHAR;
V_A STR_ARRAY := NEW STR_ARRAY('A','B','C');
V_B STR_ARRAY := NEW STR_ARRAY('D','E','F');
V_C STR_ARRAY;
BEGIN
V_C := NEW STR_ARRAY();
FOR I IN V_A.FIRST .. V_A.LAST LOOP
V_C.EXTEND();
V_C[V_C.COUNT] := V_A[I];
END LOOP;
FOR I IN V_B.FIRST .. V_B.LAST LOOP
V_C.EXTEND();
V_C[V_C.COUNT] := V_B[I];
END LOOP;
FOR I IN 1 .. V_C.COUNT LOOP
PRINT(V_C[I]);
END LOOP;
END;
方式二,弄个过程来做拼接处理
DECLARE
TYPE STR_ARRAY IS VARRAY(10) OF VARCHAR;
V_A STR_ARRAY := NEW STR_ARRAY('A','B','C');
V_B STR_ARRAY := NEW STR_ARRAY('D','E','F');
V_C STR_ARRAY;
PROCEDURE P_APPEND(V_DEST IN OUT STR_ARRAY,V_SOUR STR_ARRAY)
IS
BEGIN
IF V_SOUR IS NULL THEN
RETURN;
END IF;
IF V_SOUR.COUNT = 0 THEN
RETURN;
END IF;
IF V_DEST IS NULL THEN
V_DEST := NEW STR_ARRAY();
END IF;
FOR I IN V_SOUR.FIRST .. V_SOUR.LAST LOOP
V_DEST.EXTEND();
V_DEST[V_DEST.COUNT] := V_SOUR[I];
END LOOP;
END;
BEGIN
P_APPEND(V_C,V_A);
P_APPEND(V_C,V_B);
PRINT('写入V_C');
FOR I IN 1 .. V_C.COUNT LOOP
PRINT(V_C[I]);
END LOOP;
P_APPEND(V_A,V_B);
PRINT('写入V_A');
FOR I IN 1 .. V_A.COUNT LOOP
PRINT(V_A[I]);
END LOOP;
END;
可以用concat函数
--创建表结构
create table AA.ABC(NAME string_array,PALCE string_array);
--插入数据
insert into AA.ABC values('a1','b1');
insert into AA.ABC values('a2','b2');
commit;
--查询
select concat(NAME,PLACE) from AA.ABC;