Нужен автоматизм для вставки в таблицу недостающих строк оператора select - PullRequest
0 голосов
/ 22 июня 2019

У меня нет большого опыта работы с базой данных, поэтому я прошу помощи в этой ситуации:

Этот оператор выбора здесь получает все документы, которых нет в таблице, которую я использую для сопоставления моих документов, которые собираются интегрировать в другие системы, это таблица сопоставления (TP_DOC_MAP). Поэтому я хочу создать в моей базе данных какой-нибудь автоматизм, чтобы X в X раз выполнял этот оператор и вставлял его в мою таблицу сопоставлений (TP_DOC_MAP).

Прямо сейчас это было сделано вручную. Я запускаю это утверждение, и я вставляю каждую запись вручную, и это, конечно, не имеет смысла.

    (
    SELECT DOM_DOCUMENT.DOMAIN_DOC,
            TYPE_DOCS.TYPE_DOC_PK,
            TYPE_DOCS.TIPO_DOCUMENTO,
            TYPE_DOCS.USERCODE,
            TYPE_DOCS.CODE_RESULT
         FROM TYPE_DOCS 
        JOIN DOM_TDOC_SIS 
               ON TYPE_DOCS.TYPE_DOC_PK = DOM_TDOC_SIS.TYPE_DOC_PK
         JOIN DOM_DOCUMENT 
              ON DOM_TDOC_SIS.DOMAIN_DOC_PK = DOM_DOCUMENT.DOMAIN_DOC_PK
         WHERE DOM_DOCUMENT.DOMAIN_DOC_PK IN (2, 10) -- (QLD = | PRD = 2) 
     "motive docs" -- (QLD = 63 | PRD = 10) "Consent. docs"
    AND NOT EXISTS
                 (
                  SELECT 1
                    FROM TP_DOC_MAP
                   WHERE  TP_DOC_MAP.LS_LOCAL_PK = 8 
                         AND TP_DOC_MAP.LS_SYSTEM_PK = 3 -- system type
                         AND TP_DOC_MAP.ACTIVE = 1 -- Mapping all the active 
  documents
                         AND TP_DOC_MAP.CODE = TYPE_DOCS.TYPE_DOC_PK --"not e 
 xists" junction
                ))


    INSERT INTO TP_DOC(CODIGO, NAME, ACTIVE, CREATEDAT, UPDATEDAT) VALUES 
    ('TPDOC_23', 'Report for intrusive function', 1, SYSDATE, NULL);

    INSERT INTO TP_DOC_MAP (TP_DOCUMENT_PK, LS_LOCAL_PK, LS_SYSTEM_PK, CODE, 
    ACTIVE, CREATEDAT, UPDATEDAT) VALUES ((SELECT TP_DOCUMENT_PK FROM TP_DOC 
    WHERE CODE = 'TPDOC_23'), (SELECT LS_LOCAL_PK FROM LS_LOCAL WHERE CODE = 
   'IPE'), (SELECT LS_SYSTEM_PK FROM LS_SYSTEM WHERE CODIGO = 'MDS'), '21', 
    1, SYSDATE, NULL);

так что я хочу создать подпрограмму базы данных, чтобы сделать это автоматически.

1 Ответ

0 голосов
/ 23 июня 2019

Преобразуйте этот код в процедуру, например,

create or replace procedure p_insert as
begin
  insert into target_table (col1, col2, ...)
    select rows_that_are_missing
    from some_other_table
    where ...;
end;

Затем запланируйте это, используя пакеты DBMS_JOB или DBMS_SCHEDULER. Например:

declare
  l_job number;
begin
  dbms_job.submit
   (job       => job_insert, 
    what      => 'p_insert;'
    next_date =>  sysdate,
    interval  => 'sysdate + 1');
end;
...