暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 批量收集到已经有数据的现有集合中

askTom 2017-08-25
542

问题描述

我可以批量收集到已经有数据的现有集合并保留原始数据吗?换句话说,将新数据附加到现有数据中?

我正在寻找的输出将是 (订单不重要):

QWERTY
ASDF
Haikus很容易
但是有时候它们没有意义
冰箱

LiveSQL脚本正在引发错误: ORA-04088: 在触发器 “SYS.DBCLOUD_BEFORE_DDL_DB_TRG” ORA-06512执行期间出错: 在 “SYS.DBCLOUD_SYS_SEC”,第1295行

当我在办公桌上运行它时,我没有收到错误。

专家解答

可能最接近的是将查询添加到嵌套表作为第二个查询的一部分,

SQL> create or replace type String255List as table of varchar2(255);
  2  /

Type created.

SQL> create table U_TEST1 (COLUMN_1 varchar(255))
  2  /

Table created.

SQL> create table U_TEST2 (COLUMN_2 varchar(255))
  2  /

Table created.

SQL>
SQL> insert all
  2    into U_TEST1 (COLUMN_1) values ('QWERTY')
  3    into U_TEST1 (COLUMN_1) values ('ASDF')
  4  select * from dual
  5  /

2 rows created.

SQL> insert all
  2    into U_TEST2 (COLUMN_2) values ('Haikus are easy')
  3    into U_TEST2 (COLUMN_2) values ('But sometimes they don`t make sense')
  4    into U_TEST2 (COLUMN_2) values ('Refrigerator')
  5  select * from dual
  6  /

3 rows created.

SQL>
SQL> set serverout on
SQL> declare
  2      vTest String255List;
  3
  4  begin
  5      vTest := String255List();
  6
  7      select ut.COLUMN_1
  8          bulk collect into vTest
  9      from U_TEST1 ut;
 10
 11      -- a whole bunch of stuff goes on here such that simply unioning the two selects is not an option
 12
 13      select ut.COLUMN_2
 14          bulk collect into vTest
 15      from U_TEST2 ut;
 16
 17      for i in 1 .. vTest.count
 18      loop
 19          DBMS_OUTPUT.put_line (vTest(i));
 20      end loop;
 21  end;
 22  /
Haikus are easy
But sometimes they don`t make sense
Refrigerator

PL/SQL procedure successfully completed.

SQL>
SQL>
SQL>
SQL> set serverout on
SQL> declare
  2      vTest String255List;
  3      vTest1 String255List;
  4
  5  begin
  6      vTest := String255List();
  7
  8      select ut.COLUMN_1
  9          bulk collect into vTest1
 10      from U_TEST1 ut;
 11
 12      -- a whole bunch of stuff goes on here such that simply unioning the two selects is not an option
 13
 14      select ut.COLUMN_2
 15          bulk collect into vTest
 16      from U_TEST2 ut
 17      union all
 18      select * from table(vTest1);
 19
 20      for i in 1 .. vTest.count
 21      loop
 22          DBMS_OUTPUT.put_line (vTest(i));
 23      end loop;
 24  end;
 25  /
Haikus are easy
But sometimes they don`t make sense
Refrigerator
QWERTY
ASDF

PL/SQL procedure successfully completed.

SQL>
SQL>



我已经将LiveSQL传递给了相关人员。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论