MERGE в таблицу, используя COLLECTION внутри пакета PL / SQL - PullRequest
0 голосов
/ 25 мая 2019

Здесь я попытался создать коллекцию вложенных таблиц в пакете

create or replace PACKAGE udt_types_pkg
AS
 type customers_rec is table of customers%rowtype;
END udt_types_pkg;

Я пытаюсь создать процедуру, объявляющую коллекцию cust_rec со ссылкой на тип коллекции из пакета

create or replace PROCEDURE test_proc(

      output_msg OUT VARCHAR2)
      --rcrds_affected OUT VARCHAR2)
IS

cust_rec udt_types_pkg.customers_rec;

BEGIN
   SELECT * BULK COLLECT INTO cust_rec
     FROM CUSTOMERS;

     merge into customers_new tar
      using (
        select * from table(cust_rec)
      ) src  
      on (src.customerid = tar.customerid)
      when matched then
        update set 
        tar.type = src.type

      when not matched then
        insert 
         values (src.customerid,  src.name, src.address, src.telephone, src.type); 

            output_msg := 'Procedure_successfully_executed';
END;

Когда я запускаю процедуру, я получаю эту ошибку:

ORA-21700: объект не существует или помечен для удаления
ORA-06512: в "SYSTEM.TEST_PROC", строка 13
ORA-06512: в строке 5

Пожалуйста, помогите мне исправить это. Спасибо!

Мне также может понадобиться включить процедуру в другой пакет.

...