0

重複の可能性:
シェルスクリプトを使用して、SQLスクリプトからローカル変数に列を選択します

SQLクエリを使用してパラメーターを取得し、その後このパラメーターを使用してスクリプトを実行するUNIXスクリプトを作成しようとしています。とりあえず、取得したパラメーターをエコーするようにしようとしています。ヒキガエル (Oracle 8) で正常に動作する SQL クエリは次のとおりです。

select billcycle from bc_run
where billcycle not in (50,16)
and control_group_ind is null
and billseqno=6043    

上記のクエリは数値を返します。

今私が書いたスクリプトは次のとおりです。

#!/bin/bash

echo "this script will print the billcycle date"

v_bc=`sqlplus -s /@bscsprod <<EOF
select billcycle from bc_run
where billcycle not in (50,16)
and control_group_ind is null
and billseqno=6043`

echo "billcycle number is $v_bc" 

ファイルを実行したときの結果は

billcycle number is

続く番号なし。

何が問題なのですか?おそらくSQLサーバーに接続するための構文ですか?

ありがとうアサフ。

4

2 に答える 2

0

あなたもEOFで終わるべきだと思います:

v_bc=`sqlplus -s /@bscsprod <<EOF
select billcycle from bc_run
where billcycle not in (50,16)
and control_group_ind is null
and billseqno=6043
EOF`

編集済み: おっと、Alex Poole によって修正されました。

于 2013-01-28T10:29:16.750 に答える
0

リンク先の重複した質問 APC は実際の例を示していますが、明確にするために 2 つの問題があります。最初のものは致命的ではなくEOF、 Rembunator が指摘したように (その答えでは間違った場所にありますが)を持っていないだけです。

さらに重要なのは;、クエリに終了がないため、SQL*Plus はクエリを実行せず、何も出力せずに終了することです。

元のクエリを SQL*Plus コマンド プロンプトとして入力すると、さらにプロンプ​​トが表示されて入力を待機したままになり、もう一度 Return キーを押すと、クエリを実際に実行せずに通常のプロンプトに戻ります。

SQL> select billcycle from bc_run
  2  where billcycle not in (50,16)
  3  and control_group_ind is null
  4  and billseqno=6043
  5
SQL> 

また、少なくとも出力の書式設定が必要になることもあります。したがって、これは機能するはずです:

v_bc=`sqlplus -s /@bscsprod <<EOF
set pagesize 0
select billcycle from bc_run
where billcycle not in (50,16)
and control_group_ind is null
and billseqno=6043;
EOF`
于 2013-01-28T10:56:33.167 に答える