从动态表动态获取列

时间:2018-11-05 18:06:09

标签: sql oracle plsql oracle11g

我有两个表,我需要使用游标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;

当我遍历它们时,我需要插入和删除某些行,我该如何动态地从游标c1中获取某些列,例如criado_em。

我需要执行

之类的操作
stmt_ins:= 'INSERT into ' || n_tab2 || ' SELECT * FROM ' || n_tab || ' where ''' || dt_criado  || '< :dt';

EXECUTE IMMEDIATE stmt_ins USING sysdate;

但是我不能,因为我不知道如何从动态表im咨询中返回变量dt_criado作为criado_em的列值。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

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;