在PL/SQL Developer中如何转义和号

27

我正尝试对Oracle数据库执行一个简单的INSERT语句。其中一个值是VARCHAR2字段,该插入语句包含一个&符号。我该如何处理这个问题?我尝试了以下方法:

  1. 使用set escape on将&转义为\&
  2. 设置scan off(这会导致ORA-00922缺少或无效选项错误)
  3. 设置define off(这会导致ORA-00922缺少或无效选项错误)

还有其他的想法吗?


3
我已经使用此问题中的chr(38)解决了它:https://dev59.com/M3M_5IYBdhLWcg3w-4rw 但我希望有更优雅的解决方案。 - Ray Booysen
你是想通过 SQL 窗口还是命令窗口执行插入操作? - Adam Paynter
Ray,你尝试将定义设置为另一个字符而不是完全关闭它了吗?我不确定它是否有帮助,因为我不使用PLSQL开发人员,但这可能会有所帮助... - Ollie
SQL窗口。这一点尤其重要,因为我们的部署团队(无论好坏)也遵循这个流程。 - Ray Booysen
@Ollie,是的,我试过了。结果一样。 - Ray Booysen
只有命令窗口模拟 SQL*Plus 的“set”变量,因此您的 SQL 窗口中存在语法错误。此外,在 SQL(或 PL/SQL Developer)中没有“转义”字符,除非它是“like”表达式的一部分,这就是为什么您的 \ 没有被识别的原因。 - William Robertson
7个回答

33
在SQL窗口的底部有一个按钮可以禁用/启用替换变量:

输入图像描述


1
那真是难找啊。我花了10分钟浏览了所有设置选项,才在网上找到这个。 - Tomas Greif
这个答案在SQLTools中同样适用。 - CBono

27

我是通过用另一个 & 转义 & 来解决这个问题的。

例如:

INSERT INTO Foo (Bar) VALUES ('Up && Away');

非常好用。感谢所有的帮助。


确实如此,但要小心使用plsqld本地搜索和替换工具时不要将“&”替换为“&&”,因为这可能会进入无限循环。 - roselan
2
不是我的解决方案...我的答案是"...INSERT INTO tablex VALUES ('Sid ' || '&' || ' Nancy');..." - Eugenio F. Martinez Pacheco

13

PL/SQL Developer中需要花费时间熟悉的一个功能是各种不同窗口类型的大量存在。

其中之一是COMMAND窗口,它基本上是一个SQL*Plus模拟器。我们可以在该窗口中运行SQL*Plus命令以及SQL语句,因此SET ESCAPESET DEFINE以及SET SCAN OFF等命令可以在该窗口中使用。


12

你尝试过这样的方法吗?

INSERT INTO tablex VALUES ('Sid ' || '&' || ' Nancy');

改进我的第一个答案,你的问题与PL/SQL开发人员有关。如果你在PL/SQL Developer命令窗口中执行你的块,则也可以使用标准的SET DEFINE OFF,其工作方式与SQL * Plus相同。


我认为这并不比Ray提到的chr(38)解决方案更优雅。 - APC
可能吧,但是这是我一年前遇到类似问题时使用的方法。在http://www.orafaq.com/wiki/SQL_FAQ中也有一些不错的SQL*Plus解决方案,例如SET ESCAPE '', SET DEFINE ~或SET SCAN OFF。 - Aitor
1
不错的解决方案,比调整全局设置更加愉悦。稍微简短一些:'Sid &' || ' Nancy'。 - Hans-Peter Störr

5

在我的select语句中,concat函数完美地工作了。以下是我所做的:

select FUND_NM
FROM PERFORMANCE
WHERE upper(FUND_DESC) in ('My L&' ||'L FUNDS')

4

在PL/SQL中,我使用chr(38)代替&符号。

addr:= 'mysite.com/order.aspx?no=5678' || CHR(38) || 'id=947';
--above line gives you 'mysite.com/order.aspx?no=5678&id=947';

2

这只是SQL编辑器的问题。要解决这个问题,只需使用SET DEFINE OFF编译该过程。 在服务器上执行的PL (执行)不会遇到此问题。


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