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

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

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

Oracle Database 12cは、RDBMS製品です。世界初の商用RDBMSであるOracle Databaseのバージョンで、2013年にリリース。クラウド対応を考慮して設計されました。主な機能には、マルチテナント対応やインメモリデータベースの実装などがあります。

Q&A

解決済

3回答

10168閲覧

SQL*Plusの実行結果をきれいにしたい

SatoshiRoppongi

総合スコア6

Oracle Database 12c

Oracle Database 12cは、RDBMS製品です。世界初の商用RDBMSであるOracle Databaseのバージョンで、2013年にリリース。クラウド対応を考慮して設計されました。主な機能には、マルチテナント対応やインメモリデータベースの実装などがあります。

0グッド

0クリップ

投稿2020/05/11 05:28

編集2020/05/11 05:45

前提・実現したいこと

CentOS上から sqlplus コマンドを利用してSQL*Plusにログインし利用しているのですが、そのまま select * from hoge_tableまたは、select hoge_col1, hoge_col2 from hoge_table のように命令を実行すると、標準出力されるものがとても見にくい状態となってしまいます。
事象としては、下記サイト様に記載されていることと同じです。

Oracle SQL*Plus SQLの表示結果を見やすくする方法 表示幅の調節「LINESIZE」「COLUMN」

上記サイトで個別にカラムの幅を設定できることはわかったのですが、ログインするたびにカラムの数だけ設定するのが面倒です。
また、login.sql にあらかじめ設定を書いておけばよいとも思いますが、カラム定義(バイト数)をひとつずつ確認して、数十テーブルの数百以上あるカラム情報をひとつずつ定義していくのが大変です。

今、下記解決策を検討しているのですが、他に良いやり方はありますでしょうか。
(妥協案の一つで、列はカンマ区切りでも構いません)

  1. select hoge_col1||','||hoge_col2 from hoge_table を実行する

テーブル情報(desc)から、||','||で文字列連結するスクリプトを自前で用意して利用する。
2. カラム幅自動で取得し、login.sqlを生成するスクリプトを作成する。

bash

1※イメージで、実際のコードではありません 2# テーブルリストの取得 3"select distinct table_name from all_tab_columns;" ⇒ tab_list 4for tab in `cat tab_list` 5 # カラムリストの取得 6 "select column_name from all_tab_columns where table_name = '${tab}' and data_type = 'VARCHAR2';" ⇒ col_list 7 for col in `cat col_ilst` 8 # カラムサイズの取得 9 "select round(avg(lengthb(${col}))) from ${tab};" ⇒ col_size 10 "column ${col} format a${col_size} truncate" ⇒ login.sqlに追記

そもそも、普通OracleDBのデータを扱うクライアントソフトでSQL*Plusの対話モードを普段使いするというシチュエーションはあまりないのでしょうか。
(あったら解決策(設定ファイル・スクリプト)がもっと簡単に見つけられると思うので)

よろしくお願いいたします。

補足情報(ツールのバージョンなど)

CentOS6にOracle Database 12cをインストールして使用しています。

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

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

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

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

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

SatoshiRoppongi

2020/05/11 05:37

ご指摘ありがとうございます。 失礼いたしました。修正いたしました。
guest

回答3

0

便利なところで、Oracle 表領域毎の容量、空き容量、使用率取得 グラフ付き がだいたい参考になるかと。

投稿2020/05/11 08:02

Orlofsky

総合スコア16415

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

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

SatoshiRoppongi

2020/05/12 00:14

これは便利ですね。Oracleの各種情報を見る際に参考にさせていただきます。 ご回答ありがとうございました。
guest

0

ベストアンサー

ここに反応してみます。

そもそも、普通OracleDBのデータを扱うクライアントソフトでSQL*Plusの対話モードを普段使いするとい>うシチュエーションはあまりないのでしょうか。

バッチ処理では SQL*Plus を使いますが、普段は使いません。
SI Object Browser 等の GUI ツールで SQL の実行結果を確認したりしています。

Windows だといろいろありますが、Linux だと SQLDeveloper くらいしか知らないです。

「SQL Developer ダウンロード」
https://www.oracle.com/technetwork/jp/developer-tools/sql-developer/downloads/index.html

投稿2020/05/11 06:26

KOZ6.0

総合スコア2622

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

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

SatoshiRoppongi

2020/05/12 00:15

> バッチ処理では SQL*Plus を使いますが、普段は使いません。 やはりそうなのですね。GUIクライアントの導入を検討いたします。 ご回答ありがとうございました。
guest

0

普通、

SQL

1SET HEADING OFF 2SET TRIMSPOOL OFF 3SET WRAP OFF 4SET PAGESIZE 0 5SET NEWPAGE NONE 6SET LINESIZE 1000

とかにして、1行に1レコード、余計な行が入らないようにする、かな。
(LINESIZE の最大値はシステム依存なので適宜変更)

なおcsvにするなら、

SQL

1SET MARKUP CSV ON

というのも手です。

投稿2020/05/11 06:08

編集2020/05/11 06:08
tacsheaven

総合スコア13703

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

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

SatoshiRoppongi

2020/05/12 00:08

ご回答ありがとうございます。 直接SQL*Plusの対話モードに入る際には、上記設定を行いたいと思います。 なお、 ```sql SQL> SET MARKUP CSV ON SP2-0158: 不明なSETオプションです。"CSV" SQL> ``` は私の環境ではうまくいきませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問