Pular para o conteúdo

Fóruns Banco de dados Oracle Deletar e inserir dados – Oracle 10g Deletar e inserir dados – Oracle 10g

#92634
burga
Participante

    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.