• ベストアンサー

シェルでSQLの結果を取得したい

シェルスクリプトでSQLPLUSから、SQL文を実行させる事はできたのですが、そのSQLがSELECT文の時、その抽出した結果をシェルスクリプト上 、知りたいとき、どのようにすればわかりません。 SELECT した結果は必ず0個または1個です。 どなたかご教授ください。 sqlplus -S user/pass @${SQL_FILE} << EOF >log.txt EOF SQL_FILEの中身 select seq from A_table where ID = 1

質問者が選んだベストアンサー

  • ベストアンサー
  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.1

spoolを使えばいいと思います。 SQL_FILEの中身を、 set pagesize 0 spool log.txt select seq from A_table where ID = 1 spool off exit とすればいかがでしょうか。 seqの文字数が80を超えるときは、spoolの前に set linesize 120 のように、1行の文字列の最大値を増やす行を追加してください。 http://www.iceprobe.net/database/oracle/oraoraplus/plus_command.php

-Rena-
質問者

お礼

ありがとうございます。 おかげでうまくできました。

関連するQ&A

  • sqlplusで実行したSQLの結果をシェルで判定する方法

    sqlplusから実行したSQLの結果をシェルで判定するにはどうすれば良いですか? SQLコードかなんらかのステータスコードを拾いたいのですが。。 #!/bin/sh # sample1.sh top sqlplus user/pass@db @sqlfile.sql # ここにステータス判定を入れたい # sample1.sh bottom ----- sqlfile.sql ----- create table tb1 (it1 varchar(1) ); quit; ----- sqlfile.sql -----

  • BシェルでSQL文を実行

    【OS:AIX】 あるユーザーでCRONを組んでおり、オラクルのプレシジャを読み込ませるシェルプログラムをCシェルで組んでありました。 それをとある理由でBシェルに変更させてチェックしております。 ところがBシェルに変更してから以下のsqlplus文で失敗してしまいます。 ただ、単独でshファイルを実行するときは、SQL文も読み込んでくれて問題なく正常に終了するのですが、crontabで実行させるとSQL文を読み出すところで失敗してしまいます。 何かいけないところはありますでしょうか # SQL*Plusを呼び出しデータ作成 sqlplus ID/PASSWORD@SID < $HOME/script/data.sql ユーザアカウント自体はデフォルトでKシェルで作成されたユーザです。

  • SQL*Plus内でPL/SQL、SQLを実行するシェルスクリプトを書

    SQL*Plus内でPL/SQL、SQLを実行するシェルスクリプトを書いています。 イメージ sqlplus scott/tiger << EOF   declare     aaa number;   begin     -- *1     select col1 into aaa from test1;   end;   /   -- *2   define a=1   define b=1   @test.sql EOF ここで*1にて例えば複数行が返ってくるなどのエラーが 発生した場合、*2以降のSQLを実行せずにSQL*Plusから抜けたいのですが どのようにすればよいかわかりますでしょうか。 whenever sqlerror exit 255 などはPL/SQL内の論理エラーはハンドリングしてくれないようです。 よろしくお願いします。 それかdefineや@マーク指定によるsqlファイルの取り込みを PL/SQLの中で実行できる方法を教えていただく方法でも 当方が実施したいことはできるのでそれでもかまいません。

  • シェルスクリプトからSQL文発行

    こんにちは 今シェルスクリプトを作成し、oracleに対して、SQL文を発行したいのですが、ユーザーパスワードを入れた時点で処理が止まります シェルスクリプトからoracleに対して、DROP TABLEを行いたいのですが、この処理は可能ですか? 可能であれば、実行した際のログも保持し、エラーがあった場合の処理を行いたいです。 ご存知の方いらっしゃいましたらご教授お願いいたします 現在のソース: sqlplus ユーザー名/パスワード # ここまではうまくいきますが、ここで処理がとまります drop table テーブル名

  • SQLの結果が返ってこない

    PHP+mysqlで以下のようなSQL文で処理を行ったのですがデータが返ってきません。 $sql = 'SELECT * FROM books WHERE id=3'; $recordSet = mysql_query($sql); if(mysql_fetch_assoc($recordSet)){ while ($table = mysql_fetch_assoc($recordSet)) {        処理     } } mysqlの画面で SELECT * FROM books WHERE id=3 を入力してみるとしっかりと結果が返ってきます。 ちなみに1行目を、違うテーブルの $sql = 'SELECT * FROM podcast WHERE code=3 ORDER BY dcdate DESC LIMIT 0,3'; にしてみると、データが表示されます。 2日間かけてずっと試行錯誤してみたのですが、完全に行き詰ってしまったので、何か考えられる原因はありませんでしょうか。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • SQL実行結果取得

    バッチファイルにて、 sqlplusコマンドにより*.sqlファイルを実行し、 SQL文を発行していますが、 実行結果(処理件数)をコマンドプロンプト上 に表示したいのですが、どなたか。手法をご存知では ないでしょうか?

  • シェルスクリプトでオラクルのエラーメッセージを取得するには

    シェルスクリプト上でsqlplusを起動し、さらにSQLの実行結果(エラーメッセージ)を取得するにはどのようにシェルをどのように記述すればよいでしょうか? ---------------------------------------- sqlplus scott/tiger@hoge SQL>select * from dep; * 1行でエラーが発生しました。 ORA-00942: 表またはビューが存在しません。 ---------------------------------------- 上記のようなコマンド実行とエラーメッセージの取得を行いたいのですが、シェルについては超初心者のためよく分かりません。 実行環境は以下の通りですが、ご存知の方教えて頂けないでしょうか。よろしくお願いします。 OS:Red Hat Linux 8.0 DB:Oracle8.1.7

  • Shell SQL*Plus終了後の処理

    ShellでSQL*PLUSを実行した時に SQL実行後にShellの処理が行われません。 処理内容:Truncateした後にSQL*Loderで再度データを流し込みを行う。 <Script> echo "S" sqlplus $ora_pass << EOF > $scrLOG truncate table W_TableA ; truncate table W_TableB ; select 'OK!' from dual ; Exit EOF echo "E" cat $scrLOG sqlldr $ora_pass $inv_ctl $inv_log 上記のScriptでEcho ”S”はDOS画面に表示されますが、 SQL実行後にEcho ”E”が出力されません。 ”S”出力後は通常のコマンド入力画面が表示されます。 何がいけないのでしょうか? どなたかわかる方がいればご教示いただきたいです。

  • SQL*Plusの実行結果にSQL文も残したいです

    SQL*Plusをスクリプトファイルを使って実行した際、実行SQLの出力はできないものでしょうか? 以下のようにスクリプトファイルを使ってSQL*Plusを実行し、その結果をログファイルへ 残しています。この時ログファイルには、実行結果は出力されるのですが、実行SQLは 出力されないようです。なんとかして実行SQLと、実行結果を作業ログとして残したいと 考えているのですが、何かよい方法はないものでしょうか? [ama@rh01 test]$ sqlplus scott/tiger@orcl @test01.sql > test01.log ■環境 Red Hat Linux 4 Oracle10g ■以下test01.sqlの中身です。 ---ここから-------------- create table ex01 ( c1 number, c2 varchar2(10), c3 varchar2(40) ); insert into ex01(c1,c2,c3) values(1,'AA1','BBB1'); select * from ex01; update ex01 set c2='aa1' where c1 =1; select * from ex01; exit; ---ここまで-------------- ■以下ログファイルの中身です。 ---ここから------------------ [ama@rh01 test]$ cat test01.log 省略 With the Partitioning, OLAP and Data Mining options に接続されました。                       ←ここにcreate文を出力したいです。 表が作成されました。                       ←ここにinsert文を出力したいです。 1行が作成されました。                       ←ここにselect文を出力したいです。 C1       C2   C3 ---------- ---------- ---------------------------------------- 1        AA1   BBB1                       ←ここにupdate文を出力したいです。 1行が更新されました。                       ←ここにselect文を出力したいです。 C1      C2 C3 ---------- ---------- ---------------------------------------- 1 aa1 BBB1 Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production With the Partitioning, OLAP and Data Mining optionsとの接続が切断されました。 [ama@rh01 test]$ -------------------ここまで--------------- どなたか良いアドバイスいただけたらと思います。 どうぞよろしくお願いします。

  • SQLの結果を更に絞り込む

    ADOのRECORDSETをSQLのSELECT文で抽出します。 そのRECORDSETに対して更にSQLをかけることは出来るのでしょうか? やりたいことはキーワード検索した結果に対して更に 別のキーワードで絞りこむといったことなのですか。 よい方法がありましたら教えてください。