質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

シェル

シェル(shell)はUnix や Linux 系のOSで使用されるコマンドインタプリタを指します。

Q&A

解決済

2回答

14681閲覧

sqlplusでcsv出力したらカラム名が見切れる

k_m

総合スコア11

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

シェル

シェル(shell)はUnix や Linux 系のOSで使用されるコマンドインタプリタを指します。

0グッド

0クリップ

投稿2018/12/17 01:58

先日、shellからsql実行して結果をcsv出力したいですと質問した者です

#!/bin/bash filename=test.csv cat $filename | while read line do name=$(echo "$line" | cut -d',' -f1) sql=$(echo "$line" | cut -d',' -f2-) sqlplus -s ユーザ名/パスワード << EOF set colsep','; set underline off; SPOOL /home/oracle/gomi/$name.csv CREATE $sql SPOOL OFF exit EOF cat gomi/$name.csv | sed 1d | sed2d > kekka/$name.csv

色々とサイト等を参考にして考え上記のシェルを作成しました
実行したsqlの結果をカンマ区切りにしてcsv出力してそこから更に不要な空白等を
消してkekkaディレクトリにcsv出力するという感じになっています

これで

id, name, password
1 田中, test

という風にcsv出力できたのですが、カラム名が途中で途切れて困っています
具体的には

id, name, pass
1, 田中, test

上記のようにカラム名が"password"のはずが"pass"までしか表示されない状態です

調べてみると SQL*PLUSの表示幅は自動的に決定されカラムヘッダは勝手に捨てられるとのことでした
col カラム名 format a数値 で対策できるとあったのですが、
これ以外の解決方法はないのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

その通り、

col カラム名 format a数値 で対策できるとあったのですが、

COLUMN PASSWORD FORMAT A8
とします。

投稿2018/12/17 02:26

Orlofsky

総合スコア16415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

k_m

2018/12/19 00:40

回答ありがとうございました すこし考えて別の方法で解決いたしました ちょっと回りくどい方法のようなので次は回答してくださった方法でやりたいと思います
guest

0

回答ありがとうございました

Orlofskyさんのおっしゃる通りの方法でしかできないようでしたが、
今回は別にファイル名と使われているカラムを@で区切ったcsvファイル(test2csv)
name@id,name,password
を別途用意してそこからカラム名を抜き出してcsv出力するシェルを作成

上記のシェルに質問内に書いたシェルを変えたものを組み込み、カラムヘッダを取り除いた
ものを上書きすることで解決しました

id, name, pass  ←test2csvから抜き出したカラム
1, 田中, test ←test.csvのカラムヘッダを取り除いたものを上書き

投稿2018/12/19 00:38

編集2018/12/19 00:46
k_m

総合スコア11

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問