Unixシェルスクリプトでsqlファイルを呼び出してみてください。
Sql1.shの実行
#!/bin/sh
## steps to get the connection and form it.
result=`sqlplus -S ${connectURL} << EOF
SET PAGES 0 lines 800
@ /sql/testQuery.sql ${LOGFILE}
EOF`
echo $result
上記のスクリプトの出力(予想どおりに動作し、例外なし)
フロントモジュラス:0リアモジュラス:16エラーはありません。
Sql2.sh 実行 {開始空間は、結果変数の下に保持されます。}
#!/bin/sh
result=`sqlplus -S ${dbConnect} << EOF
SET PAGES 0 lines 800
@ /sql/testQuery.sql ${LOGFILE};
EOF`
echo $result
実行すると、ExecuteSql2.sh
出力は次のようになります。
ExecuteSql2.sh:行147:警告:ここではファイルの末尾に区切られた144行の文書(「EOF」が必要です)MODULUS BEFORE:0 MODULUS AFTER:16エラーはありません。 SP2-0042: 不明なコマンド 'EOF' - 残りの行は無視されます。
スペースを置き換えるために「組み込みコマンドを使用するときに不明な場合は、この問題が発生する可能性があります。
これには特別な理由がありますか?
query.sql テスト:
SET SERVEROUTPUT ON SIZE UNLIMITED
set heading off verify off feedback off echo off
SPOOL &1
declare
modulus NUMBER := 0;
BEGIN
DBMS_OUTPUT.PUT_LINE('MODULUS BEFORE: '||modulus);
select mod(100,21) into modulus from dual;
DBMS_OUTPUT.PUT_LINE('MODULUS AFTER: '||modulus);
end;
/
SET ECHO ON FEEDBACK ON
SHOW ERRORS
SPOOL OFF
ベストアンサー1
文書によると3.6 リダイレクト - 3.6.6 ここに文書化:
このタイプのリダイレクトは行に単語(末尾の空白なし)が見えます。この時点までに読み取られたすべての行は、コマンドの標準入力(またはnが指定されている場合はファイル記述子n)として使用されます。
この文書の形式は次のとおりです。
[n]<<[-]word here-document delimiter delimiter
したがって、あなたのコードは
result=`sqlplus -S ${dbConnect} << EOF
SET PAGES 0 lines 800
@ /sql/testQuery.sql ${LOGFILE};
EOF
`
最後の `` ''はEOFの下になければなりませんが、$()
以下の表記法を使用する方が良いと思います。
result=$(sqlplus -S ${dbConnect} << EOF
SET PAGES 0 lines 800
@ /sql/testQuery.sql ${LOGFILE};
EOF
)