Oracle特殊字符

3

我有一个查询

select * from table where name in ('52 T&M', '60 T&M');

"&"导致查询期望参数。如何在查询字符串中限定"&",以便查询可以找到包含"&"字符的字符串?


1
相关链接:https://dev59.com/FnVD5IYBdhLWcg3wAWsO - OMG Ponies
@所有人....我的错....这是在Oracle 10g存储过程中。不是在SQL Server....抱歉 - MikeTWebb
3个回答

9

各位,如果你在SQLPlus中使用"&"符号,它会被解释为变量占位符,请改用如下方式:

SET DEFINE OFF

@天啊...那段代码应该放在存储过程的哪个位置?就像我下面提到的,查询语句在BEGIN之前定义的CURSOR中。 - MikeTWebb
@MikeTWebb:在脚本顶部。我敢说这是一个匿名PLSQL块... - OMG Ponies
+1 今天我学到了新东西!@MikeTWebb 它将作为脚本的第一行或者说大约在那里。无论脚本是通过 CREATE OR REPLACE .... 定义过程、包体还是函数,还是脚本包含一个匿名的 PL/SQL 块。 - Shannon Severance
我知道可以使用“&”符号来定义提示信息,但我不知道如何关闭它们。我一直在使用字符串连接作为解决方法。(例如将 'Foo&'||'Bar' 用于 'Foo&Bar' - Shannon Severance

4

通常我会像omg建议的那样使用set define off,但也可以这样做:

select *
from table
where name in ('52 T'||Chr(38)||'M', '60 T'||Chr(38)||'M');

0

我假设您使用sqlplus,因此在执行之前,请执行以下操作

set scan off


@Michael....查询字符串位于游标的定义中。我尝试了你的建议,但怀疑游标定义搞砸了它。 - MikeTWebb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接