Informix: Como obter o conteúdo da tabela e os nomes das colunas usando o DBACCESS?
Pergunta
Supondo que eu tenho:
- Um banco de dados do Informix chamado "my_database"
- Uma tabela chamada "my_table" com as colunas "col_1", "col_2" e "col_3":
Eu posso extrair o conteúdo da tabela, criando um my_table.sql script como:
unload to "my_table.txt"
select * from my_table;
e invocando o dbaccess da linha de comando:
dbaccess my_database my_table.sql
Isso produzirá o my_table.txt Arquivo com conteúdo como:
value_a1|value_a2|value_a3
value_b1|value_b2|value_b3
Agora, o que tenho que fazer se quiser obter os nomes das colunas no my_table.txt? Curti:
col_1|col_2|col_3
value_a1|value_a2|value_a3
value_b1|value_b2|value_b3
Solução
Nenhuma das ferramentas padrão do Informix coloca os nomes das colunas na parte superior da saída, como você deseja.
O programa SQLCMD (não o recém -chegado da Microsoft - o original, disponível no IIUG Software Archive) tem a capacidade de fazer isso; use o -H
opção para os títulos da coluna (e -T
para obter os tipos de coluna).
sqlcmd -U -d my_database -t my_table -HT -o my_table.txt
sqlunload -d my_database -t my_table -HT -o my_table.txt
O SQLCMD também pode executar a saída CSV, se é isso que você precisa (mas - bug - não formate os nomes da coluna ou as linhas de linhas de coluna corretamente).
Outras dicas
Por que você não usa dbschema?
Para obter o esquema de uma tabela (sem parâmetro -t, mostre todo o banco de dados)
dbschema -d [DBName] -t [DBTable] > file.sql
Para obter esquema de um procedimento armazenado
dbschema -d [DBName] -f [SPName] > file.sql
Encontrei uma solução mais fácil. Coloque os cabeçalhos em um arquivo, digamos header.txt
(ele conterá uma única linha "col_1|col_2|col_3
") Em seguida, para combinar o arquivo de cabeçalho e seu arquivo de saída executado:
cat header.txt my_table.txt > my_table_wth_head.txt