Estou tentando escrever um script que produzirá uma tabela em um CSV. A parte complicada foi fazer com que a saída mostrasse o cabeçalho apenas uma vez. O script abaixo não mostra o cabeçalho. A outra opção que usamos é definir o pagesize
valor extremamente alto. Isso também tem sido muito problemático.
set colsep |
set pagesize 0
set trimspool on
set linesize 10000
spool table1.csv
SELECT host_name from v$instance;
select to_char(sysdate, 'Dy DD-Mon-YYYY HH24:MI:SS') as "CURRENT TIME" from dual;
prompt ================================================
prompt TABLE 1
prompt SELECT * FROM tbl1;
prompt ================================================
SELECT * FROM tbl1;
spool off
Para maior clareza: não tenho acesso direto ao banco de dados. Estarei passando o script para um DBA para executar no banco de dados, então PL/SQL ou qualquer outra coisa mais avançada do que um script muito básico provavelmente não é uma opção. Também por causa disso, quero que os cabeçalhos das colunas mostrem UMA VEZ e apenas uma vez se houver 10 ou 10 milhões de registros na tabela. Isso me dará descrições razoáveis dos dados de que preciso e minimizará a limpeza antes de analisar os dados.
Você pode executar duas consultas - a primeira extrai a lista de nomes de campo em tbl1 de user_tables e, em seguida, a segunda consulta extrai os dados reais de tbl1? Spool tudo para o mesmo arquivo. Não tem uma instância em execução do Oracle para testar, mas isso pode ser uma solução para o seu problema? Remove a necessidade de PL/SQL - embora eu não consiga ver a diferença entre executar um shell script e um PL/SQL simples.