динамическое получение столбцов из динамической таблицы - PullRequest
0 голосов
/ 05 ноября 2018

У меня есть две таблицы, к которым мне нужно получить доступ, одну с помощью курсора c1, а другую - с помощью курсора c2, они обе хранят столбцы, содержащие имена таблиц, к которым мне нужно получить доступ для выполнения таких операций, как вставка или удаление.

CURSOR c1 IS
      SELECT ID_BCK_CFG_TAB,
             Nome_tab,
             pref_tab_bck,
             max_reg_bck,
             criado_em
        FROM sii_bck_cfg_tab
       WHERE desativado_em IS NULL 
          OR desativado_em<=SYSDATE
         AND n_dias_reten>0
    ORDER BY criado_em; 

CURSOR c2 IS 
    SELECT sii_bck_tab.ID_BCK_CFG_TAB,
           sii_bck_tab.nome_tab
      FROM sii_bck_tab,
           sii_bck_cfg_tab
     WHERE sii_bck_cfg_tab.id_bck_cfg_tab = sii_bck_tab.id_bck_cfg_tab
       AND dt_fecho is NULL;

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

мне нужно выполнить такие операции, как

stmt_ins:= 'INSERT into ' || n_tab2 || ' SELECT * FROM ' || n_tab || ' where ''' || dt_criado  || '< :dt';

EXECUTE IMMEDIATE stmt_ins USING sysdate;

но я не могу, потому что я не знаю, как вернуть переменную dt_criado в качестве значения столбца criado_em из динамической таблицы, к которой я обращаюсь.

Любая помощь будет высоко ценится.

1 Ответ

0 голосов
/ 06 ноября 2018
open c1;

loop
    fetch c1 into tmp; -- get current row
    exit when c1%notfound; -- check if more rows exist

    IF tmp.myDateCol >= SYSDATE THEN 
        execute immediate 'INSERT INTO ' || tmp.colname  || ' VALUES (1,2)';
    END IF;
end loop;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...