1

jsp レポートを実行した後、次のエラーが表示されます。

クエリ タグ:doAfterBody()、0、サポートされていない SQL92 トークンの位置: 3477: S

次のスニペットが問題「{S}」を引き起こしていることを知っています:

…….. AND (L.Applicable_Location_Region_ID IN (N'PARIS2', N'{S}Paris2'))

私の調査によると、次のことがわかりました: Oracle は SQL を解析し、"'{S}Paris2" のテキストを文字列リテラルとして扱い、{S} を見つけます。認識。

次のリンクは、「エスケープ文字」についてよく説明しています: http://docs.oracle.com/cd/F49540_01/DOC/inter.815/a67843/cqspcl.htm

{S} に続けて名前を使用する必要があります。

上記の AND ステートメントは、SQL Server と MySQL では正常に機能しますが、Oracle では「中かっこを使用して単一の文字をエスケープすると、エスケープされた文字がクエリ内の別のトークンになる」という問題が発生します。

上記の理由により、アプリケーションは {S} を扱います。これは、エスケープされた中括弧付きの 1 文字がクエリ内の別のトークンになるためです。

ですから、オラクルで中括弧を使用して単一の文字をエスケープする方法や提案をお願いします。

4

1 に答える 1

0

試す

AND (L.Applicable_Location_Region_ID IN (N'PARIS2', N'\{S\}Paris2')) 

編集:

Toadからこのクエリを実行する

select (N'{S}test2') from dual where ((N'{S}test2') IN (N'test2', N'{S}test2'))

私のために働きます。問題がOracleデータベースにあり、それにアクセスするクラス/ドライバにないことを確認しますか?

于 2012-10-17T12:30:00.067 に答える