在Oracle SQL查询中,如何将一行与该行中的数组连接起来
我已经声明了一些自定义oracle类型:在Oracle SQL查询中,如何将一行与该行中的数组连接起来,sql,oracle,plsql,user-defined-types,Sql,Oracle,Plsql,User Defined Types,我已经声明了一些自定义oracle类型: create type S_TYPE as table of VARCHAR2(4000); CREATE TYPE "OBJ_ORDER_ADD" AS object ( ADD_TYPE NUMBER, ADDITION s_type -- other fields not represented here for brevity ); create type ARRAY_ORDER_ADD as table of OBJ_ORDER
create type S_TYPE as table of VARCHAR2(4000);
CREATE TYPE "OBJ_ORDER_ADD" AS object (
ADD_TYPE NUMBER,
ADDITION s_type
-- other fields not represented here for brevity
);
create type ARRAY_ORDER_ADD as table of OBJ_ORDER_ADD;
这意味着我可以创建ARRAY\u ORDER\u ADD
的实例,如下所示:
add_type | addition
---------------------
10 | ['a', 'b']
20 | ['x', 'y', 'z']
我需要创建函数
,该函数可以将包含的数据合并到相应的order\u add
表中,其中addition
列是VARCHAR
。将上面的对象合并到空表中后,我希望该表包含:
add_type | addition
-------------------
10 | 'a'
10 | 'b'
20 | 'x'
20 | 'y'
20 | 'z'
我知道我可以使用一个带有两个嵌套循环的简单解决方案来实现这一点,但是这个解决方案会导致大量SQL/PLSQL上下文切换,我希望避免它们
我的理想目标是使用单个MERGE
查询来实现这一点
这可能吗
我尝试了几种组合
SELECT。。。从表(myRecord)
开始,我试图用表(myRecord.addition)
对每条记录进行笛卡尔积,但我似乎无法正确地将其组合起来。我不太确定您的实际实现是什么,但这向您展示了如何在纯SQL中取消嵌套表
WITH子句创建示例数据的集合,然后我们使用连续的table()
函数来解压缩嵌套的表对象:
with cte as (
select ARRAY_ORDER_ADD(OBJ_ORDER_ADD(10, s_type('a', 'b'))
, OBJ_ORDER_ADD(20, s_type('a', 'b', 'c'))) as nt
from dual
)
select t.add_type
, x.column_value as s_type_element
from cte
, table(cte.nt) t
, table(t.addition) x;
是的,我试图通过按enter键添加一个标签,但不知怎么的,这过早地发布了这个问题。现在已经完成了。我将试着看看我是否可以将其应用于合并。效果很好。很明显,我现在遇到了一些其他问题,这些问题使得我的单个合并查询的性能比当前方法(更新或插入前选择10个)要好。可能有一些关于基数的问题,但如果我不能弄明白,那将是另一个问题。