web-dev-qa-db-ja.com

タブ区切りのデータファイルを生成するためのSQLPlus設定

スプレッドシートにプルしたり、さらに処理したりするために、特定のSQLクエリをタブで区切られた出力に変換するのに役立つsqlplus構成ディレクティブの優れたセットを持っている人はいますか?

17
user19387

Justinがリンクで指摘したように、_set colsep_関数のSQLPlusコマンドを使用すると、列ごとに区切り文字を入力する手間が省けます。

ただし、タブ区切りの場合、set colsep Chr(9)は機能しません。

UNIXまたはLINUXの場合は、_set colsep ' '_を使用し、一重引用符の間のスペースを入力タブにします。

Windowsの場合、次の設定を使用します。

_col TAB# new_value TAB NOPRINT
select chr(9) TAB# from dual;
set colsep "&TAB"

select * from table;
_
9
user158017

私が何度も盗んだ特定のスクリプトの1つは、 フラットファイルへのデータの抽出 のAskTomスレッドからのものです。 SQL * Plusからすばやくダーティなフラットファイルが必要な場合。ただし、進行中のあらゆる種類のプロセスでは、トムがそのスレッドに以前に投稿したDUMP_CSV関数を好む傾向があります。

3
Justin Cave

私は愚かな解決策を得ました。それは非常にうまくいきました。

解決

SELECT column1 || CHR(9) || column2 || CHR(9) || column3 ... ...
FROM table

背後にある原則

実際には、それは単なる文字列連結です。

CHR(9)-> '\ t'

column1 || CHR(9)|| column2 ->concat(column1、 '\ t'、column2)

1
Marvin W

タブ文字は表示されませんが、次のように入力すると:-

colsepZを設定します

ただし、Zの代わりに、キーボードの1つでTabキーを押してから、Enterキーを押すと機能します。 SQLPlusは、スペースの次の文字(非表示のタブ)がcolsepであることを理解します。

すべての設定を/cli.sqlという名前のファイルに配置したので、これを実行します:-

@/cli.sql

それらすべてをロードします。

set serveroutput on
SET NEWPAGE NONE
set feedback off
set echo off
set feedback off
set heading off
set colsep  
set pagesize 0 
SET UNDERLINE OFF
set pagesize 50000
set linesize 32767
connect use/password

(注意-行末の非表示スペースの後に非表示タブがあります:)

set colsep  

楽しい!

0
Chris Drake