「C言語 + OCI」で実行されていたSQLを、C#へ移植する際、C言語の時に使われていた改行コード「\n」をそのままにし、C#からOracleに対しSQLを発行すると、以下のエラーが発生した。
ORA-06550: 行1、列2432: PLS-00103: 記号”end-of-file”が見つかりました。 次のうちの1つが入るとき:
( begin case declare end exception exit for goto if loop mod null pragma raise return select update while with <an identifier> <a double-quoted delimited-identifier> <a bind variable> << continue close current delete fetch lock insert open rollback savepoint set sql execute commit forall merge pipe purge
declare、begin、end;を使うような長文SQLを、C#から単独実行する場合、プロシージャ化するしかないのかとも疑ったが、C言語の時、SQLの改行コードに使っていた「\n」が、C#では使えないのが原因だった。 「\r\n」へ置換する事で、このエラーは発生しなくなった。
改行コードが、\n、\r\n のどちらであっても、SQL Developerからはエラー無く実行でき、エラーMSGからは解決策を見いだせなかったのでハマった。
変更前
1 2 3 |
"declare\n" + |
変更後
1 2 3 |
"declare\r\n" + |
コメント