我有两个表,我需要使用游标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的列值。
任何帮助将不胜感激。
答案 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;