Имя таблицы, имена столбцов в качестве аргумента хранимой процедуры - PullRequest
1 голос
/ 22 июня 2019

Я новичок в хранимой процедуре и в PL / SQL.Существует существующая процедура для копирования данных из одной таблицы в другую.Я хочу переписать хранимую процедуру, чтобы принимать имена таблиц и столбцов в качестве аргументов. Я нашел решение, но не смог найти надежное решение.

Также планирование добавления имен столбцов в качестве аргумента, чтобы имена столбцов не добавлялись неоднократно в нескольких хранимых процедурах, использующих одни и те же таблицы и столбцы, помогает сократить объем обслуживания при добавлении / удалении имен столбцов.,Код был добавлен.

Кто-нибудь может мне помочь с этим?Любой пример кода будет очень полезным.

create or replace procedure copy_data(startDate DATE, endDate DATE, 
mainTable varchar2, subTable varchar2, cpyTbl varchar2)
IS

commit_size NUMBER :=1000;
existing_columns NUMBER;
after_deletion_columns NUMBER;
removed_columns NUMBER;


TYPE order_ids IS TABLE OF subTable.id%TYPE INDEX BY PLS_INTEGER;
removable_order_ids order_ids;
bulk_errors EXCEPTION;
PRAGMA EXCEPTION_INIT (bulk_errors, -24381);


CURSOR C1 is select id FROM subTable where ord_id in (select ord_id from 
mainTable where tmstmp BETWEEN startDate AND endDate);
BEGIN

open C1;
LOOP
  FETCH C1 BULK COLLECT INTO removable_order_ids LIMIT commit_size;
   forall indx in 1..removable_order_ids.COUNT 
    INSERT INTO cpyTbl (id, ord_id, name, phon_nbr) 
      select id, ord_id, name, phon_nbr from subTable
      where ord_id =  removable_order_ids(indx)  LOG ERRORS INTO 
      ERR$_cpyTbl('INSERT') REJECT LIMIT UNLIMITED;

  COMMIT;  
 EXIT WHEN removable_order_ids.COUNT < commit_size;
 END LOOP;

COMMIT;

конец;

...