este stmt funciona sem a cláusula where
Isso pode ser porque quando você concatena as strings, elas são convertidas implicitamente e sua condição where falha em tempo de execução. Experimente o
USING
cláusula com variáveis de ligação. stmt_ins:= 'INSERT INTO ' || n_tab2 || ' SELECT * FROM ' || n_tab || ' where ' || dt_criado || ' < :dt ' ;
EXECUTE IMMEDIATE stmt_ins USING SYSDATE;