【问题标题】:how to append values to a plsql table如何将值附加到 plsql 表
【发布时间】:2021-05-03 00:21:44
【问题描述】:

我必须从 3 个不同的查询(下面的 Q1、Q2 和 Q3)中获取 ID 值并将它们附加到 plsql 表中,以便以后可以使用 table() 来使用它。但我无法“追加”到表格中。你能告诉我怎么做吗?我在 Oracle 12G 中。我不想像在我的生产场景中那样合并所有查询,我需要从 15 个不同的查询中提取并且不想写一个很大的查询。每次,我“放入”这个 plsql 表中,早期的数据都会被擦除并且看不到追加。知道如何使用 plsql 表来实现这一点吗?

CREATE OR replace PACKAGE pkg AS
  TYPE customer_id_table_type IS TABLE OF all_customers.customer_id%TYPE;
  PROCEDURE process_customers;
END pkg;
/

CREATE OR replace PACKAGE BODY pkg AS

 PROCEDURE process_customers IS
  customer_id_table customer_id_table_type := customer_id_table_type();
  BEGIN 

  -- Q1
  SELECT customer_id BULK COLLECT
  INTO   customer_id_table
  FROM   old_customers cust
  WHERE  cust.last_update_date BETWEEN SYSDATE - 100 AND    SYSDATE;

  -- Q2
  SELECT customer_id BULK COLLECT
  INTO   customer_id_table
  FROM   new_customers cust
  WHERE  cust.last_update_date BETWEEN SYSDATE - 100 AND    SYSDATE;

  -- Q3
  SELECT customer_id BULK COLLECT
  INTO   customer_id_table
  FROM   archive_customers cust
  WHERE  cust.last_update_date BETWEEN SYSDATE - 100 AND    SYSDATE;

  FOR rec IN
  (
         SELECT customer_info
         FROM   all_customers acc
         WHERE  customer_id IN  (SELECT * FROM TABLE(customer_id_table)))
  LOOP
    dbms_output.put_line('customer info: '|| rec.customer_info);
  END LOOP;
 END process_customers;
END pkg;
/

【问题讨论】:

    标签: oracle plsql extend


    【解决方案1】:

    所以没有BULK COLLECT APPEND 或任何东西,但您可以将多个嵌套表与MULTISET UNION 组合在一起。因此,您可以填充多个嵌套表,然后将它们组合起来。我不确定与单个 UNION SQL 查询相比性能如何,但我希望它会比任何循环工作要好得多。

    所以你会做这样的事情:

    SELECT customer_id BULK COLLECT
      INTO   customer_id_table_1
      FROM   old_customers cust
      WHERE  cust.last_update_date BETWEEN SYSDATE - 100 AND    SYSDATE;
    
    SELECT customer_id BULK COLLECT
      INTO   customer_id_table_2
      FROM   new_customers cust
      WHERE  cust.last_update_date BETWEEN SYSDATE - 100 AND    SYSDATE;
    
    customer_id_table_1 := customer_id_table_1 MULTISET UNION customer_id_table_2;
    

    【讨论】:

      猜你喜欢
      • 2019-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多