グッドデザイン賞を受賞したウォーターサーバー >>

サーバー:windows 2003server oracle10g
クライアント:windows xp oracle10g

以下のsqlファイルをbatで起動し、テキストファイルを出力しています。
しかしながら、setのところにヘーダーを出力するよう宣言しているのに
もかかわらず、出力されません。
どなたかおわかりになる方、いらっしゃいませんでしょうか?

set echo off
set heading on
set underline off
set termout off
set pause off
set pagesize 0
set trimspool on
set feedback off
set termout off
set linesize 1000
set lines 30000
spool hoge.txt

select
aaa||CHR(9)||
bbb||CHR(9)||
ccc||CHR(9)||
ddd
from M_JITU;
spool off
EXIT

このQ&Aに関連する最新のQ&A

A 回答 (2件)

出力されない理由は#1さんの回答の通りです。



対応方法も#1さんのでよいのですが、出力結果が沢山あってpagesizeを超える場合もあると思います。

その場合、そこで1行、余分な改行が入ってしまう事が考えられます。

pagesize は 0 のまま、spool と select の間に prompt 文でヘッダーを付けてやればよいのでは?
(と言うか、自分はそうしています)

但し、ご質問の例だと、タブ区切りなので、この場合は、一応SELECTの方がいいかもしれません。

(前略)
spool hoge.txt

select 'aaa' ||CHR(9)|| 'bbb' ||CHR(9)|| 'ccc' ||CHR(9)|| 'ddd'
from dual;

select
aaa||CHR(9)||
(以下略)
    • good
    • 1
この回答へのお礼

ありがとうございます。

お礼日時:2012/12/24 10:47

set pagesize 0



を指定すると出ません。
0ではなく大きな値を指定してみてください。
    • good
    • 2
この回答へのお礼

ありがとうございます。解決致しました。

お礼日時:2012/12/24 10:48

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qsqlplusで表示が変なので、出力を整形したい。

いつもお世話になっています。

サーバにアクセスしてsqlplusで、
データを調べたいのですが、
出力形式が見づらくて困っています。

よくわからいのですが、
---------------------------
カラム名1
---------------------------
カラム名2
---------------------------
カラム名3
---------------------------
1の値 2の値
3の値
---------------------------
カラム名1
---------------------------
カラム名2
---------------------------
カラム名3
---------------------------

上記のように意味不明な形式で出てきます。

例えばこんな風に

select カラム1,カラム2,カラム3 from hoge;

カラム1 1の値
---------------------------
カラム2 2の値
---------------------------
カラム3 3の値

等のように分かりやすく表示できないでしょうか?

ちなみにOracle9iR2を使用しています。
sqlに関するツールは使用できないルールでして、あくまでsqlplusのコマンド上でみやすくしなければなりません。

分かりづらくですいませんが、皆さま、ご教授お願いします。

いつもお世話になっています。

サーバにアクセスしてsqlplusで、
データを調べたいのですが、
出力形式が見づらくて困っています。

よくわからいのですが、
---------------------------
カラム名1
---------------------------
カラム名2
---------------------------
カラム名3
---------------------------
1の値 2の値
3の値
---------------------------
カラム名1
---------------------------
カラム名2
---------------------------
カラム名3
-----------------------...続きを読む

Aベストアンサー

SQLPLUSを起動して、

SQL>set linesize 列数

でどうだ。

SQL>show linesize

で確認ができる。

QSQL Plusで項目名が最後まで表示されない?

下記のコマンドを入力後、実行結果を見ると項目の部分が切れています。これを正しく表示するにはどうすればいいでしょうか?
回答のほどよろしくお願い致します。

SELECT TO_CHAR(HIREDATE,'RR') AS 入社年, JOB AS 職種 , TO_CHAR(AVG(ROUND(SAL,1)),'$9,999') AS 平均給与 FROM EMP GROUP BY TO_CHAR(HIREDATE,'RR') ,JOB

入 職種 平均給
-- --------- -------
80 CLERK $800
81 CLERK $950
81 ANALYST $3,000
81 MANAGER $2,758
81 SALESMAN $1,400
81 PRESIDENT $5,000
82 CLERK $1,300
82 ANALYST $3,000
83 CLERK $1,100

Aベストアンサー

SQL*PLUSの表示幅は、自動的に決定され、カラムヘッダは、
勝手に捨てられます。(デフォルト動作)
しかも、バージョンによって微妙に違う。(^^;

対策ですが、デフォルトに頼らず、自前で設定するとこができます。

先のSQLの「入社年」ですが、

col 入社年 format a6

というコマンドを投入すると、「入社年」というカラムは、内容に
関わらず、6桁幅で表示されます。
(面倒な方法ですが、カラム表示に拘るならこれしかありません)

Qbatファイルからsql文実行

クライアントOS:WIN2000
Oracle:9i(サーバ(UNIX)上にあります)

現在、クライアントからbatを起動し、SQL文を投げ、結果を取得したいと思っております。
(SQL文は単純にTBLをカウントしているだけです)

・batの中身
sqlplus %UID%/%PASS%@%SID% @test.sql > output

結果は取得出来るのですが、余分な情報も結果に出力されてしまいます。結果のみを出力させるにはどうすればよろしいでしょうか?

・余分な情報
Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.4.0 - Production
に接続されました。

Aベストアンサー

sqlplus に -S オプションを追加してみればどうでしょうか。

参考URL:http://biz.rivus.jp/sqlplus_overview.html

Qselectした結果の余計な余白を取るにはどうしたらよいのでしょうか

質問が二つあります。

質問1)会社の先輩に、sql/plusでORACLEのDBに接続し、以下の命令を実行するとselectした結果をcsv形式でファイル出力できると教えてもらいました。

set num 18
set linesize 1000
set pagesize 0
set trimspool on
set colsep ','

上記の「set num 18」の意味を「sqlリファレンス」で調べても載ってなく分かりませんでした。ご存知の方は教えて下さい。また、どのようなマニュアルに載っているのかも教えて下さい。

質問2)上記命令を実行後に、名前=「NAME_KANJI」、属性=VARCHAR2(60)のカラムをselectすると次の様に出力されました。「~,XXXX…(この後空白が続く),~」次に、trim(NAME_KANJI)、substr(NAME_KANJI,1)、substr(NAME_KANJI,length(NAME_KANJI))などで出力すると「XXXX]の後の空白が更に長く出力されまました。substr(NAME_KANJI,1,4)なら「XXXX]の後の空白がなくなるのですが、登録されている文字数は不定のため、文字数に応じて空白を除いて出力する方法はあるのでしょうか、あればその方法を教えて下さい。よろしくお願いします。

質問が二つあります。

質問1)会社の先輩に、sql/plusでORACLEのDBに接続し、以下の命令を実行するとselectした結果をcsv形式でファイル出力できると教えてもらいました。

set num 18
set linesize 1000
set pagesize 0
set trimspool on
set colsep ','

上記の「set num 18」の意味を「sqlリファレンス」で調べても載ってなく分かりませんでした。ご存知の方は教えて下さい。また、どのようなマニュアルに載っているのかも教えて下さい。

質問2)上記命令を実行後に、名前=「NAME_KANJI」、属性...続きを読む

Aベストアンサー

こんにちは。

回答1.
SQL*Plusユーザーズ・ガイドおよびリファレンス

回答2.
SELECT COL1||','||COL2||','||COL3
FROM テーブル名
みたいにカラムを連結させてしまう方法もありますよ。

Q3つの表の外部結合

表A、B、Cの3つがあり、Aのすべての行を出力したいと考えています。
外部結合を用いるのだとは思うのですが、3つの表に対して行う場合の
書き方がわからず困っています。
ご教授いただけないでしょうか?
select * from a,b,c
where a.商品ID =b.商品ID (+) and b.商品ID (+) =c.商品ID (+)
としてみましたが、うまくいきませんでした。

Aベストアンサー

ansi構文の趣旨からいえば、結合条件と絞り込み条件は分けて書くので・・

select *
from a
left join b on (a.商品ID =b.商品ID)
left join c on (b.商品ID =c.商品ID)
where a.年月 = 任意の値

と書くのが一般的でしょうね。

QSQL実行結果の出力を見やすくしたい

Oracle 10gを使用して勉強をしています。
SQL実行結果の出力が見にくくて困っています。
以下、(1)は自分が実行したSQL文ですが、(2)のように見やすく出力したいです。

どのようにすればよいのでしょうか?
また参考となるWEB URLがある場合、頂けたら嬉です。

(1)自分が実行したSQL文
SQL> select
2 sid,serial#,username,osuser,program,machine,terminal
3 from v$session
4 where type = 'USER';

SID SERIAL# USERNAME
---------- ---------- ------------------------------
OSUSER PROGRAM
------------------------------ ------------------------------------------------
MACHINE
----------------------------------------------------------------
TERMINAL
------------------------------
543 39 SYS
oracleuser sqlplus@HOGE-net (TNS V1-V3)
HOGE-net
pts/1


SID SERIAL# USERNAME
---------- ---------- ------------------------------
OSUSER PROGRAM
------------------------------ ------------------------------------------------
MACHINE
----------------------------------------------------------------
TERMINAL
------------------------------
544 5 SYS
oracleuser sqlplus@HOGE-net (TNS V1-V3)
HOGE-net
pts/0


(2)こんな感じで出力させたいです。
select
sid,serial#,username,osuser,program,machine,terminal
from v$session
where type = 'USER';

SID SERIAL# USERNAME OSUSER PROGRAM  MACHINE   TERMINAL
---- ------- --------- ------ ---------- ---------  --------
139     2      TEST Owner sqlplus.exe   HOGE_XP HOGE_XP
144     20    SYSTEM      ORACLE.EXE HOGE_XP  HOGE_XP

Oracle 10gを使用して勉強をしています。
SQL実行結果の出力が見にくくて困っています。
以下、(1)は自分が実行したSQL文ですが、(2)のように見やすく出力したいです。

どのようにすればよいのでしょうか?
また参考となるWEB URLがある場合、頂けたら嬉です。

(1)自分が実行したSQL文
SQL> select
2 sid,serial#,username,osuser,program,machine,terminal
3 from v$session
4 where type = 'USER';

SID SERIAL# USERNAME
---------- ---------- ---------------------------...続きを読む

Aベストアンサー

set pages 10000 lines 10000 trims on
col username for a30
col osuser for a30
col program for a30
col machine for a30
col terminal for a30

select
sid,serial#,username,osuser,program,machine,terminal
from v$session
where type = 'USER';

こんな感じでどうですか?
ちなみに、a30は30文字分の幅という意味です。
number 型のデータの場合には指定方法がかわりますが、
number 型はそのままでも表示が乱れることはあまりないので、
それほど気にしなくてもよいでしょう。

QDBからタブ区切りのCSVデータを抽出する

DBからCSVにしてデータを取り出そうと、ネットで検索して
みようみまねでやってみました。(下記の場合カンマ区切りですが)
タブ区切りで整列したデータを抽出したいのですが、特に、
(4)のように隣合う項目の間がかなり離れていて見えにくい状態で
CSVファイルが作成されてしまいます。
(1)のように整列した形で、タブ区切りのCSVデータを抽出するには、
どのようにしたら宜しいのでしょうか?

(2)、(3)は、試してみた実行ファイルです。
環境は、oracle10g windowsXPです。

(1)目的の結果の表示-------------------------------
653-5689 ZM05 田中太郎 YOKOHAMAS 4 4  9 097005・・・・・


以下試してみたbatファイルとsqlで抽出

(2)batファイル----------------------------------
sqlplus ABCD/ABCD@oracle.host1.ser @abc.sql

(3)sqlファイル-----------------------------------
set echo off
set heading off
set termout off
set pause off
set pagesize 0
set trimspool on
set feedback off
set colsep ","
set term off
spool hoge.txt
select
*
from T_JUTYU;
spool off
exit

(4)結果---------------------------------
653-5689 ,ZM05
田中太郎
,YOKOHAMASI
4, 4, , ,9 ,097005
,

1 ,18 , , ,
, ,
0 ,asahi
asahi ,08-12-23,08-12-23,
------------------------------------------------まで結果

DBからCSVにしてデータを取り出そうと、ネットで検索して
みようみまねでやってみました。(下記の場合カンマ区切りですが)
タブ区切りで整列したデータを抽出したいのですが、特に、
(4)のように隣合う項目の間がかなり離れていて見えにくい状態で
CSVファイルが作成されてしまいます。
(1)のように整列した形で、タブ区切りのCSVデータを抽出するには、
どのようにしたら宜しいのでしょうか?

(2)、(3)は、試してみた実行ファイルです。
環境は、oracle10g windowsXPです。

(1)目的の結果の表示-------------...続きを読む

Aベストアンサー

CSV(TSVでも同様)をSQL*Plusでspoolするのに必須と言えるSET文が足らないですね。

set linesize 1000

ライン長を指定しないと、デフォルトでは適当なところで折り返されてしまいます。
1000は1000バイトです。
普通、とりあえず5000くらいにしておきますが、業務要件に則して想定される最大のバイト数を指定してください。

それと、正直、colsep をカンマにしてCSVを作るのはお薦めできません。
(多分、仕事で使っている人は殆どやらないと思います)

面倒くさいけど、カラムを連結する方法が確実です。

SELECT
COL1 || CHR(9) || COL2 || CHR(9) || COL3 || CHR(9)...
FROM T_JUTYU;

CHR(9) はタブです。

また、上記は、カラムがすべて文字列の場合の例です。
数値や日付がある時は明示的にTO_CHARでキャストしてください。

TO_CHAR(数値型カラム)
TO_CHAR(日付型カラム, 'YYYY-MM-DD HH24:MI:SS')

CSV(TSVでも同様)をSQL*Plusでspoolするのに必須と言えるSET文が足らないですね。

set linesize 1000

ライン長を指定しないと、デフォルトでは適当なところで折り返されてしまいます。
1000は1000バイトです。
普通、とりあえず5000くらいにしておきますが、業務要件に則して想定される最大のバイト数を指定してください。

それと、正直、colsep をカンマにしてCSVを作るのはお薦めできません。
(多分、仕事で使っている人は殆どやらないと思います)

面倒くさいけど、カラムを連結する方法が確実です。

...続きを読む

Qバッチファイルを使用したsql@plusの実行及びログ出力について

バッチファイルを使用したsql@plusの実行及びログ出力について

Windows Server 2003上で動作しているOracle10gのDBに対して
Windows XP上に配置したバッチファイルをタスクで起動させ、
sql@plusを使用してデータを削除する処理を行いたいと考えています。

---data_delete.bat---
@echo %date% %time% データ削除開始 >> log.txt
sqlplus -S USER/PASS@TNSNAME @data_delete.sql >> log.txt
@echo %date% %time% データ削除終了 >> log.txt

---data_delete.sql---
DELETE FROM TABLE WHERE FLG = 1;
EXIT;

data_delete.batを実行するとlog.txtが出力されます。
---log.txt---
yyyy/mm/dd hh:nn:ss.xx データ削除開始

XXX行が削除されました。

yyyy/mm/dd hh:nn:ss.xx データ削除終了

この時、log.txtの内容を下記のように変更したいのですが、
その方法が分りません。

---log.txt---
yyyy/mm/dd hh:nn:ss.xx データ削除開始
yyyy/mm/dd hh:nn:ss.xx データ削除終了 XXX行が削除されました。

できれば[削除件数 XXX 件]と表示させたかったのですが、
自分の調べた限りではできそうにないので、
フィードバックされる文字列をそのまま使う方向で進めています。

上記ログの出力方法ができるようでしたら、
その方法を教えて頂けると嬉しいです。

宜しくお願いします。

バッチファイルを使用したsql@plusの実行及びログ出力について

Windows Server 2003上で動作しているOracle10gのDBに対して
Windows XP上に配置したバッチファイルをタスクで起動させ、
sql@plusを使用してデータを削除する処理を行いたいと考えています。

---data_delete.bat---
@echo %date% %time% データ削除開始 >> log.txt
sqlplus -S USER/PASS@TNSNAME @data_delete.sql >> log.txt
@echo %date% %time% データ削除終了 >> log.txt

---data_delete.sql---
DELETE FROM TABLE WHERE FLG = 1;
EXIT;

dat...続きを読む

Aベストアンサー

batのリダイレクト>>を使わず、SQL*Plus(@ではなく*です)のspoolを使ってはいかがでしょう?

set NLS_DATE_FORMAT='YYYY/MM/DD HH24:MI:SS'
sqlplus -S USER/PASS@TNSNAME @data_delete.sql

data_delete.sqlの中身
--------------------------
whenever sqlerror exit failer
set echo off
spool log.txt
select sysdate||' データ削除開始'
delete from table where flg = 1;
select sysdate||' データ削除終了'
--------------------------

ご希望のように
yyyy/mm/dd hh:nn:ss.xx データ削除開始
yyyy/mm/dd hh:nn:ss.xx データ削除終了 XXX行が削除されました。
とするためにはちょっとSQLだけではできないのでPL/SQLを使う必要があります。

batのリダイレクト>>を使わず、SQL*Plus(@ではなく*です)のspoolを使ってはいかがでしょう?

set NLS_DATE_FORMAT='YYYY/MM/DD HH24:MI:SS'
sqlplus -S USER/PASS@TNSNAME @data_delete.sql

data_delete.sqlの中身
--------------------------
whenever sqlerror exit failer
set echo off
spool log.txt
select sysdate||' データ削除開始'
delete from table where flg = 1;
select sysdate||' データ削除終了'
--------------------------

ご希望のように
yyyy/mm/dd hh:nn:ss.xx データ削除開始
yyyy/mm/...続きを読む

QOracle(オラクル)で、日付時刻型の検索方法について

質問させていただきます。
データベースはオラクルを使っていて、
SQL文で、抽出するときにエラーが出て困っています。

日付時刻型が「2005/05/26 19:13:00」という感じで入ってます。
2005/05/26 を抽出したいのですが、
BETWEEN '2005/05/26 00:00:00' AND '2005/05/26 23:59:59'

だと、エラーでできません。
どなた様か、ご教授よろしくお願いしますm(_ _)m

Aベストアンサー

日付検索を行う場合は、以下のように書式を含める必要があります。

col BETWEEN TO_DATE('2005/05/26 00:00:00','YYYY/MM/DD HH24:MI:SS') AND TO_DATE('2005/05/26 23:59:59','YYYY/MM/DD HH24:MI:SS')

ただ、厳密には

col >= TO_DATE('2005/05/26', 'YYYY/MM/DD')
AND
col < TO_DATE('2005/05/27', 'YYYY/MM/DD')

と書くべきでしょうね。

QOracleのSQL*PLUSで、データが折り返されて見づらいのですが。。。

画面を最大化しても、データが途中で折り返されて、各行が2行にわたってしまうため、縦方向に長くなってしまい、見づらいです。
どのような方法でどこの設定を変えれば、ちゃんと1行に収まって見やすくなるでしょうか。解説書の図では、問い合わせの結果が折り返されずにちゃんとそれぞれ1行に収まっているのです。
ど素人で恐縮ですが、ご存知の方、教えていただけませんか。

Aベストアンサー

こんばんわ。
自宅のパソコンからなんで詳しい事は覚えてないんですが、
プラスを立ち上げた時の設定メニューからできるはずです。
プラスは確か1000バイトまで設定できるはずです。

コマンドでやる場合はプラスを立ち上げた後に
"set lin 500"と入力して実行すると500バイトで折り返しになります。
"set lin 1000"と入力すれば1000バイトで折り返しになります。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング