› Fóruns › Banco de dados Oracle › Deletar e inserir dados – Oracle 10g › Deletar e inserir dados – Oracle 10g
Oi flavynha,
ainda existem tabelas do dicionário de dados que podem te auxiliar a criar automaticamente os scripts de inserts selects sem muito esforço…
Dê uma olhada na tabela DBA_TAB_COLUMNS onde existe COLUMN_NAME = ‘CODEMP’. Assim você não precisará esrever tudo na mão…
Exemplo:
DECLARE
stmt VARCHAR2(4000); -- pra montar o insert
stmt2 VARCHAR2(4000); -- pra montar o select
cont NUMBER(5); -- pra controlar a virgula no SQL
BEGIN
FOR i IN (SELECT TABLE_NAME FROM DBA_TAB_COLUMNS WHERE COLUMN_NAME = 'CODEMP' AND OWNER = 'SEU_ESQUEMA') LOOP
stmt := 'INSERT INTO ' || i.TABLE_NAME || ' (';
stmt2 := ' SELECT ';
cont := 0;
FOR j IN (SELECT COLUMN_NAME FROM DBA_TAB_COLUMNS WHERE TABLE_NAME = i.TABLE_NAME AND OWNER = 'SEU_ESQUEMA') LOOP
IF (cont = 0) THEN
stmt := stmt || j.COLUMN_NAME;
stmt2 := stmt2 || j.COLUMN_NAME;
ELSE
stmt := stmt || ',' || j.COLUMN_NAME;
stmt2 := stmt2 || ',' || j.COLUMN_NAME;
END IF;
cont := cont + 1;
END LOOP;
stmt := stmt || ')';
stmt2 := stmt2 || ' FROM ' || i.TABLE_NAME || ' WHERE CODEMP IN (15,16,17,...);'; -- aqui você define os CODEMP
DBMS_OUTPUT.PUT_LINE(stmt || stmt2); -- imprime o SQL pronto.
END LOOP;
END;
/
Se for utilizar DBLINK, lembre de modificar o código pra gerar o insert select com o dblink.
Acabei de escrever esse código aqui pelo fórum mesmo e não testei então provavelmente existem falhas, mas a idéia é essa… Só lembre de modificar os OWNERS nos dois selects dos FOR.