Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Oracle SQL查询中,如何将一行与该行中的数组连接起来_Sql_Oracle_Plsql_User Defined Types - Fatal编程技术网

在Oracle SQL查询中,如何将一行与该行中的数组连接起来

在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

我已经声明了一些自定义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_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个)要好。可能有一些关于基数的问题,但如果我不能弄明白,那将是另一个问题。