0

UNIXボックスにcashload.txtという名前でSQLを記述し、UNIXボックスの次の場所に保存しました。

exit |sqlplus -s batch/password@SW_TEST @/soft/checkfree/AccurateBXG/scripts/cashload.txt

Cashload.txt には、次のコードが記述されています。

spool /Detail/reports/inner/SW/Rep_OIbyAccount_$DATE_FILE.csv
select accountnumber||','||accountname||','||X from HSBC_Cash_OIbyAccount_v;
spool off

しかし、上記のパスで結果セットをスプールしていません。しかし、スクリプトが保存されているパスを指定すると、その場所でスプールしています。理由がわかりません?下のパスでスプールしています。Cashload.txt (SQL スクリプト) は保持されます。

**spool /soft/checkfree/AccurateNXG/scripts/Rep_OIbyAccount.csv**
select accountnumber||','||accountname||','||X from HSBC_Cash_OIbyAccount_v;
spool off

上記のクエリを調べて、私を助けてください。前もって感謝します!!!

4

6 に答える 6

2

これを正しく理解していれば、DATE_FILEはスプールファイル名に置き換えるシェル変数です。これはあなたの問題の一部または全部かもしれません。これをSQLPlusから直接参照できるとは思いません。これをパラメータとしてスクリプトに渡してから、SQLPlus置換変数として参照する必要があります。

したがって、コマンドラインは次のようになります。

sqlplus -s batch/password@SW_TEST @/soft/checkfree/AccurateBXG/scripts/cashload.txt $DATE_FILE

スクリプトのspoolコマンドは次のようになります。

spool /Detail/reports/inner/SW/Rep_OIbyAccount_&1..csv

(置換変数名のターミネータとして機能するため、追加のピリオドが必要です。)

于 2009-08-14T12:41:06.310 に答える
1

ほぼ間違いなく、ファイルのパーミッションの問題です。データベース内から OS とやり取りするときは、接続したアカウントではなく、oracle アカウントを使用していることに注意してください。

Oracle アカウントには /Detail/reports/inner に対する書き込み権限がありますか?

于 2009-08-14T06:42:49.147 に答える
0

サイレント (-s) オプションなしで実行すると、詳細が表示されますか?

于 2009-08-14T06:42:03.923 に答える
0

あなたが言及したパス$には、問題を引き起こしているシンボルがあります。それを避けるには、 にパスとファイル名を指定して" "ください。それは問題を解決するはずです:

SPOOL "/Detail/reports/inner/SW/Rep_OIbyAccount_$DATE_FILE.csv "
于 2010-09-17T19:29:06.283 に答える
0

「/Detail/reports/inner/SW/Rep_OIbyAccount_$DATE_FILE.csv」の値をエコーできますか?

私が考えることができる唯一の理由は、a) 上記の場所は有効なパスではありません b) その場所に書き込む権限がありません。

最初のケースでエラーが発生しますか、それとも何も起こりませんか?

于 2009-08-14T06:25:18.933 に答える