java - Oracle解析 "' {S}Paris 2"as a string literal then finds {S} which it is treating as a SQL Escape Sequence which it doesn'的文本并识别

标签 java sql oracle

运行 jsp 报告后出现以下错误。

查询标签:doAfterBody(),0,位置不支持的 SQL92 标记:3477: S

我知道以下代码片段导致了问题“{S}”:

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

根据我的调查,我了解到以下内容: Oracle 解析 SQL 并将“'{S}Paris2”的文本视为字符串文字,然后找到 {S},将其视为它无法识别的 SQL 转义序列。

以下链接很好地解释了“转义字符”: http://docs.oracle.com/cd/F49540_01/DOC/inter.815/a67843/cqspcl.htm

我们必须使用 {S} 后跟名称。

上述 AND 语句在 SQL Server 和 MySQL 中工作正常,但在 Oracle 中会出现问题,因为“当您使用大括号转义单个字符时,转义字符将成为查询中的单独标记。”

由于上述原因,应用程序会处理 {S},因为转义的带大括号的单个字符将成为查询中的单独标记。

所以请你帮我如何在oracle中转义带大括号的单个字符或任何建议。

最佳答案

尝试

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 数据库中而不是在访问它的类/驱动程序中吗?

关于java - Oracle解析 "' {S}Paris 2"as a string literal then finds {S} which it is treating as a SQL Escape Sequence which it doesn'的文本并识别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12934331/

相关文章:

Java线程分析器?

java - jtable鼠标事件弹出2次

java - XML解析java

php - 返回数组的事件记录问题(codeigniter)

MySQL - 带有嵌套分组的嵌套选择

oracle - Returning .... INTO .... 在 Oracle SQL 中究竟做了什么?

sql - 将 LIKE 结果剥离到它自己的列

java - hibernate + Maven + MySQL 连接器

mysql - 具有通用字段的大表作为 EAV 和关系表的替代品

sql - 在 Oracle 的 to_char() 中显示时区描述