Pois tenho uma base na empresa em que trabalho que ele é fechada anualmente e criada uma nova base. Essa base nós utilizamos indiretamente.
Exemplo
TESTE_2009, TESTE_2010
select * from
TESTE_||to_char(sysdate,'rrrr')
TESTE_2009, TESTE_2010
select * from
TESTE_||to_char(sysdate,'rrrr')
create or replace function count_in_table
(attr in varchar2, attrval in varchar2, tbl in varchar2)
return number
is
cnt number;
begin
execute immediate 'select count(1) from ' || tbl || ' where ' || attr || ' = :a' into cnt using attrval;
return cnt;
end;
/
execute immediate 'select * from TESTE_||to_char(sysdate,'rrrr') ';
ACCEPT v_ano_i PROMPT 'Digite o ano INICIAL (Formato: YYYY):'
ACCEPT v_ano_f PROMPT 'Digite o ano FINAL (Formato: YYYY):'
DECLARE
/* Variáveis para o PROMPT */
v_ano_i NUMBER(4) :='&v_ano_i';
v_ano_f NUMBER(4) :='&v_ano_f';
/* Cursores e Recordsets */
TYPE C1 IS REF CURSOR;
vC1 C1;
StrSql VARCHAR (200);
LINHA vC1%ROWTYPE;
BEGIN
WHILE v_ano_i <= v_ano_f LOOP
/* Instrução SQL para o Cursor */
StrSql:= 'SELECT CO_ANO||
CO_mês AS CAMPOS
FROM DONO.||v_ano_i||'_mês
GROUP BY CO_ANO,
CO_mês';
OPEN vC1 FOR StrSql;
LOOP
FETCH vC1 INTO LINHA;
EXIT WHEN vC1%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(vC1.CO_ANO||vC1.CO_mês);
END LOOP;
CLOSE vC1;
v_ano_i := v_ano_i + 1;
END LOOP;
END;
/
create or replace procedure prc_carrega_tabela(va_cod_ano in number) is
va_cursor1 integer;
va_linha integer;
native constant integer := 1;
va_des_ano varchar(6);
begin
begin
select lpad(ano,4)
into va_des_ano
from tabela_cadastro_ano
where ano = va_cod_ano;
end;
va_cursor1 := dbms_sql.open_cursor;
dbms_sql.parse(va_cursor1,'insert into nova_tabela
(campo1,campo2,campo3)
select temp1,temp2,temp3
from schema.tabela'||va_ano
||' where
temp3 between ano_inicial and ano_final',native);
va_linha := dbms_sql.execute(va_cursor1);
commit;
end;
Usuários navegando neste fórum: Nenhum usuário registrado e 6 visitantes