Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.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 如何将值附加到plsql表_Oracle_Plsql_Extend - Fatal编程技术网

Oracle 如何将值附加到plsql表

Oracle 如何将值附加到plsql表,oracle,plsql,extend,Oracle,Plsql,Extend,我必须从3个不同的查询(下面的Q1、Q2和Q3)中获取ID值,并将它们附加到plsql表中,以便以后使用table()使用它。但我无法“附加”到表中。你能告诉我怎么办吗?我在甲骨文12G。我不想像在我的生产场景中那样合并所有查询,我需要从15个不同的查询中提取,不想编写一个大的查询。每次我“放入”这个plsql表时,前面的数据都会被删除,看不到追加。您知道如何使用plsql表实现这一点吗 CREATE OR replace PACKAGE pkg AS TYPE customer_id_ta

我必须从3个不同的查询(下面的Q1、Q2和Q3)中获取ID值,并将它们附加到plsql表中,以便以后使用table()使用它。但我无法“附加”到表中。你能告诉我怎么办吗?我在甲骨文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;
/


因此,没有
批量收集APPEND
或任何东西,但您可以将多个嵌套表与。因此,您可以填充多个嵌套表,然后将它们组合起来。我不确定与单个
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;