Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.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
Plsql Oracle-如何将记录添加到相同类型的集合(多集联合)_Plsql_Oracle11g_Multiset - Fatal编程技术网

Plsql Oracle-如何将记录添加到相同类型的集合(多集联合)

Plsql Oracle-如何将记录添加到相同类型的集合(多集联合),plsql,oracle11g,multiset,Plsql,Oracle11g,Multiset,我使用了MULTISET UNION将一个集合加载到同一类型的另一个集合中,但是我现在正在处理记录,希望将一个记录添加到同一类型的集合中。无论出于何种原因,我都无法找到合适的语法或正确的方法来实现这一点,因为MULTISET UNION似乎不像我习惯于处理集合的方式那样处理记录 我在最后添加了一个关于这段代码如何工作的摘要(无论如何应该是工作的) 下面是截图和代码 第44行:c_los_ms_tbl_ret:=c_los_ms_tbl_ret MULTISET UNION los_ms_row

我使用了
MULTISET UNION
将一个集合加载到同一类型的另一个集合中,但是我现在正在处理记录,希望将一个记录添加到同一类型的集合中。无论出于何种原因,我都无法找到合适的语法或正确的方法来实现这一点,因为MULTISET UNION似乎不像我习惯于处理集合的方式那样处理记录

我在最后添加了一个关于这段代码如何工作的摘要(无论如何应该是工作的)

下面是截图和代码

第44行:c_los_ms_tbl_ret:=c_los_ms_tbl_ret MULTISET UNION los_ms_row

摘要

  • 已声明记录类型<代码>t\u los\u ms\u rec
  • 根据记录声明的表格类型
    t\u los\u ms\u tbl
  • 根据表格类型
    c_los_ms_tbl_ret
    c_los_ms_tbl

  • 在主脚本的BEGIN块中,使用单元ID作为参数调用返回类型t_los_ms_tbl集合的函数
    los_func()

  • 第20行:
    los\u func()
    a行中被声明为同一类型的
    t\u los\u ms\u rec
    。此行的字段使用假数据填充
  • 下一步是一次填充一行集合无法解决此问题
  • 此时,当注释掉我试图填充集合的第44行时,单元名称被成功地发送到dbms_输出。由于我不知道如何将已成功填充数据的记录获取到集合
    c\u los\u ms\u tbl\u ret
    ,因此,这就是它中断的原因
  • 错误报告-

    ORA-06550:第44行第32列:
    PLS-00306:调用'MULTISET\u UNION\u ALL'时使用的参数数量或类型错误。

    MULTISET UNION
    用于从两个嵌套表创建一个嵌套表。您正试图使用
    MULTISET UNION
    将嵌套表和单个记录连接在一起

    有两种方法可以解决此问题:

  • 用单个记录制作一个单元素表:

        c_los_ms_tbl_ret  := c_los_ms_tbl_ret MULTISET UNION t_los_ms_tbl(los_ms_row);
    
  • 放弃使用
    MULTISET UNION
    ,只需将新记录附加到表中即可:

        c_los_ms_tbl_ret.EXTEND(1);
        c_los_ms_tbl_ret(c_los_ms_tbl_ret.COUNT) := los_ms_row;
    

  • @卢克沃德非常好。两者都有效。如果你对表演有任何了解,我很好奇。我的假设是,多组联合将有一个更重的负荷,但我不相信我在这里有足够的经验,可以肯定地说,这样或那样。想法?我的直觉告诉我第二个会更快,但我不确定两者之间是否有巨大的性能差异。如果性能确实是您关心的问题,请尝试两种备选方案,看看哪一种效果更快。
        c_los_ms_tbl_ret.EXTEND(1);
        c_los_ms_tbl_ret(c_los_ms_tbl_ret.COUNT) := los_ms_row;