在 PL/SQL Developer 中转义 & 符号
Posted
技术标签:
【中文标题】在 PL/SQL Developer 中转义 & 符号【英文标题】:Escape ampersand in PL/SQL Developer 【发布时间】:2011-08-18 07:16:44 【问题描述】:我正在对 Oracle 数据库尝试一个简单的 INSERT 语句。其中一个值是 VARCHAR2 字段,并且插入语句包含一个 & 符号。我该怎么做呢?我试过以下方法:
-
将 & 转义为 \& 并设置转义
设置扫描关闭(这会导致 ORA-00922 缺失或无效选项错误)
set define off(这会导致 ORA-00922 缺失或无效选项错误)
还有其他想法吗?
【问题讨论】:
我已经在这个问题中使用 chr(38) 解决方案“解决”了它:***.com/questions/1137354/… 但想要更优雅的东西。 您是尝试通过 SQL 窗口还是命令窗口执行插入操作? Ray,您是否尝试过将定义设置为另一个角色,而不是完全关闭它?不确定它是否会有所帮助,因为我不使用 PLSQL Developer,但它可能...... SQL 窗口。这一点尤其重要,因为我们的部署团队(无论好坏)也遵循此程序。 @Ollie,是的,我做到了。结果相同。 【参考方案1】:在 SQL 窗口的底部有一个用于禁用/启用替换变量的按钮:
【讨论】:
这很难找到。我花了 10 分钟浏览设置中的所有选项,然后才在网上找到这个。 这个答案也适用于 SQLTools。【参考方案2】:我如何解决它是用另一个 & 转义 &。
例如:
INSERT INTO Foo (Bar) VALUES ('Up && Away');
效果很好。感谢大家的帮助
【讨论】:
确实如此,但注意不要用plsqld原生搜索替换工具将“&”替换为“&&”,否则可能会进入死循环。 不适合我...我的解决方案是答案“...INSERT INTO tablex VALUES ('Sid ' || '&' || 'Nancy');...”【参考方案3】:PL/SQL Developer 的特性之一是需要时间来熟悉的,那就是有大量不同的窗口类型。
其中之一是 COMMAND 窗口,它基本上是一个 SQL*Plus 模拟器。我们可以运行 SQL*Plus 命令以及 SQL,所以 SET ESCAPE
、SET DEFINE
和实际上 SET SCAN OFF
在那个窗口中工作。
【讨论】:
【参考方案4】:你尝试过这样的事情吗?
INSERT INTO tablex VALUES ('Sid ' || '&' || ' Nancy');
改进我的第一个答案,您的问题与 PL/SQL Developer 有关。如果您在 PL/SQL Developer 命令窗口中执行您的块,您还可以使用标准的 SET DEFINE OFF,它的工作方式与 SQL*Plus 中的相同。
【讨论】:
我不认为这比 Ray 提到的chr(38)
解决方案更优雅。
很正常,但这是我在一年前遇到类似问题时使用的那个。在orafaq.com/wiki/SQL_FAQ SQL*Plus 中也有一些不错的解决方案,例如 SET ESCAPE '\'、SET DEFINE ~ 或 SET SCAN OFF
很好的解决方案,比摆弄全局设置更令人愉快。短一点:'Sid &' || “南希”。【参考方案5】:
concat 对我来说非常好,下面是我在 select 语句中所做的:
select FUND_NM
FROM PERFORMANCE
WHERE upper(FUND_DESC) in ('My L&' ||'L FUNDS')
【讨论】:
【参考方案6】:我使用chr(38)
,我需要在 PL/SQL 中使用与号。
addr:= 'mysite.com/order.aspx?no=5678' || CHR(38) || 'id=947';
--above line gives you 'mysite.com/order.aspx?no=5678&id=947';
【讨论】:
【参考方案7】:这只是一个 SQL 编辑器问题。要解决此问题,只需使用 SET DEFINE OFF 编译程序; . PL(在服务器中执行)的执行不会遇到这个问题。
【讨论】:
以上是关于在 PL/SQL Developer 中转义 & 符号的主要内容,如果未能解决你的问题,请参考以下文章
使用PL/SQL developer概览图剖析pl/sql代码
如何使用PL/SQL Developer查看和杀掉session