2016-03-23 7 views
0

テキストファイルからplsqlブロックを読み込み、CallableStatementで実行する簡単なJavaプログラムを作成します。Oracle Jdbc CallableStatementが失敗し、plsqlにCR( " r")が含まれています

テキストファイルでCRLF( "\ r \ n")を両方使用すると、実行は失敗し、ORA-06550PLS-00103(シンボル "が発生しました)。

一方、テキストファイルがLFのみを使用する場合は正常に動作します。

NG:

BEGIN\r\nNULL;\r\nEND; 

OK:、Windowsの改行対

BEGIN\nNULL;\nEND; 

答えて

0

* NUX、あなたのサーバが* nixのであり、それは文の一部として、\ rのを見ている賭けます。

+0

私は製品を選択 '使うので、私は、データベース管理を担当してないんだけど、FROM VERSION SYS.PRODUCT_COMPONENT_VERSION; 'を実行してデータベース情報を確認し、' TNS for 64-bit Windows:\t 10.2.0.5.0'を表示します。私はそれがWindowsサーバーだと思います。 –

0

ファイルがサンプルと一致しないか、またはテキストがOracleに送信される前に他のプロセスによって変換される必要があります。両方の例は、バージョンとオペレーティング・システムに関係なく、Oracle上で正常に動作します。コマンドを文字列として作成し、をSELECTステートメントに使用すると、Oracleに送信される文字を正確に確認できます。

以下のコードはエラーを起こさずに実行され、改行と復帰を組み合わせてもキーワードを区切ることができます。

declare 
    lf varchar2(1) := chr(10); 
    cr varchar2(1) := chr(13); 
begin 
    execute immediate 'begin'||lf||'null;'||lf||'end;'; 
    execute immediate 'begin'||cr||lf||'null;'||cr||lf||'end;'; 
    execute immediate 'begin'||cr||'null;'||cr||'end;'; 
end; 
/
+0

お返事ありがとうございます。あなたは、Oracle上で直接実行されている間にCRLFとLFの両方がうまく動作することは間違いないが、私の問題はJDBCの 'CallableStatement'に関連する –

+0

しかし、これらのエラーメッセージはJavaではなくOracleから来ている。私はプログラムが送信していると思う文字列を送信していないと思う。 –

+0

あなたはもう一度正しいと思います。それは私の投稿(oracle jdbc 'CallableStatement'の問題)で尋ねていることです。 –

0

私は同じ問題を抱えていたし、すべての行は、ファイルの内容を使用する前に壊し置き換えることによってそれを解決:

plsqlText = plsqlText.replace("\r\n", " "); 
関連する問題