Как сохранить и вызвать запрос SQL из столбца таблицы? - PullRequest
0 голосов
/ 06 февраля 2019

Оператор вставки ниже содержит сведения о другой таблице, которая имеет 3 столбца (id, ins_dt, text_stuff)

INSERT INTO swpurge_config
       (schema
       ,table_name
       ,table_alias
       ,driving_column
       ,deletion_predicate
       ,retention_period_type
       ,retention_period_value)
    VALUES
       ('CUSTOMERS_OWNER'
       ,'LAST_NAMES'
       ,'LN'
       ,'ins_dt'
       ,'WHERE ln.ins_dt < SYSDATE - p_retention_period_value
      AND ora_hash(ln.rowid, 8) = 1'
       ,'month'
       ,'6');

Цель: Я по сути пытаюсь добавить предикат удаления встолбец varchar2.Идея состоит в том, чтобы вызвать этот столбец в процедуре, которая удалит записи длиной до 1000 строк:

    PROCEDURE delete_rows
   (
      p_schema                 IN VARCHAR2
     ,p_table_name             IN VARCHAR2
     ,p_table_alias            in varchar2
     ,p_retention_period_value IN VARCHAR2
     ,p_delete_predicate       IN VARCHAR2
   ) IS
      v_sql varchar2 (32000);
      v_row_limit pls_integer (1000);
   BEGIN

    v_sql := 'delete from ' || p_schema ||'.'|| table_name ||p_table_alias
     'older than '|| p_retention_period_value || p_delete_predicate;

    dbms_output.put_line(v_sql);

   END delete_rows;

Не уверен насчет двух вещей: 1. Как сохранить предложение sql where в столбце таблицы?2. Как выполнить предложение where как утверждение в процедуре?

Спасибо

1 Ответ

0 голосов
/ 06 февраля 2019

Вы говорите о Динамический SQL .

Вы можете просто сохранить его внутри VARCHAR2 в строковом формате.затем извлеките его

 select deletion_predicate into v_sql from  swpurge_config where ...

, затем

v_sql := "SELECT ...... FRom .... " || v_sql;

и, наконец, выполните его

 EXECUTE IMMEDIATE v_sql;

, если ваш оператор sql также содержит параметры, то

EXECUTE IMMEDIATE query_str
    using param1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...