criar scipt de insert

Scripts Diversos para o Oracle SQL*Plus. (Relacionado a ferramenta Oracle SQL*Plus, para questões de SQL, usar o forum SQL)
Responder
anderson.silva
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 35
Registrado em: Sex, 20 Abr 2012 10:51 am

Pessoal tenho uma tabela e gostaria de gerar atraves do sqlplus um script com os dados contidos nesta tabela.
alguém poderia me ajudar?

At,
Anderson A Silva
Avatar do usuário
stcoutinho
Moderador
Moderador
Mensagens: 850
Registrado em: Qua, 11 Mai 2011 5:15 pm
Localização: são Paulo - SP

Olá Anderson,

Eu encontrei o script abaixo, desenvolvido pelo forista HTM no site do ASKTOM (http://asktom.oracle.com/pls/asktom/f?p ... 0346294209).

Selecionar tudo

set serveroutput on size 100000
set feedback off

declare
  v_table_name      varchar2(30) := 'EMP';  -- Your Tablename
  v_column_list     varchar2(2000);
  v_insert_list     varchar2(2000);
  v_ref_cur_columns varchar2(4000);
  v_ref_cur_query   varchar2(2000);
  v_ref_cur_output  varchar2(2000);
  v_column_name     varchar2(2000);
  cursor c1 is select column_name, data_type from user_tab_columns where table_name = v_table_name 
order by column_id;
  refcur            sys_refcursor; 
begin
  for i in c1 loop
     v_column_list := v_column_list||','||i.column_name;
     if i.data_type = 'NUMBER' then
        v_column_name := i.column_name;
     elsif i.data_type = 'DATE' then
        v_column_name := 
chr(39)||'to_date('||chr(39)||'||chr(39)'||'||to_char('||i.column_name||','||chr(39)||'dd/mm/yyyy 
hh:mi:ss'||chr(39)||')||chr(39)||'||chr(39)||', '||chr(39)||'||chr(39)||'||chr(39)||'dd/mm/rrrr 
hh:mi:ss'||chr(39)||'||chr(39)||'||chr(39)||')'||chr(39);
     elsif i.data_type = 'VARCHAR2' then
        v_column_name := 'chr(39)||'||i.column_name||'||chr(39)';
     end if;
     v_ref_cur_columns := v_ref_cur_columns||'||'||chr(39)||','||chr(39)||'||'||v_column_name;
  end loop; 
  v_column_list     := ltrim(v_column_list,',');
  v_ref_cur_columns := substr(v_ref_cur_columns,8);

  v_insert_list     := 'INSERT INTO '||v_table_name||' ('||v_column_list||') VALUES ';
  v_ref_cur_query   := 'SELECT '||v_ref_cur_columns||' FROM '||v_table_name;
  
  open refcur for v_ref_cur_query;
  loop
  fetch refcur into v_ref_cur_output; 
  exit when refcur%notfound;
    v_ref_cur_output := '('||v_ref_cur_output||');'; 
    v_ref_cur_output := replace(v_ref_cur_output,',,',',null,');
    v_ref_cur_output := replace(v_ref_cur_output,'(,','(null,');
    v_ref_cur_output := replace(v_ref_cur_output,',,)',',null)');
    v_ref_cur_output := replace(v_ref_cur_output,'null,)','null,null)');
    v_ref_cur_output := v_insert_list||v_ref_cur_output; 
    dbms_output.put_line (v_ref_cur_output); 
  end loop; 
end;
/
Trata-se de um script básico, com os tipos mais comuns do ORACLE. A saída gerada por ele é feita via DBMS_OUTPUT, o que significa que existe um limite para a quantidade de linhas geradas pelo bloco PL/SQL.

Este script pode ser incrementado, agregando-se novos tipos ou gerando o output em um arquivo TEXTO ou TABELA TEMPORÁRIA.

Mas veja bem: Esta solução só será adequada se você deseja gerar scripts com pouca linhas de carga, e com colunas de pouca quantidade de caracteres. Existem outras formas mais rápidas e seguras de carga de tabelas, como SQL*LOADER, EXP/IMP, etc.

Fora o script acima, existe uma série de ferramentas tipo PL/SQL Developer, TOAD ou EMBARCADERO ou SQLDEVELOPER que permitem a geração de scripts SQL.

Abraços e boa sorte,

Sergio Coutinho
anderson.silva
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 35
Registrado em: Sex, 20 Abr 2012 10:51 am

Obrigado STCoutinho!!!
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 9 visitantes