如何避免 Oracle SQL Developer 中的变量替换

问题描述 投票:0回答:6

当我尝试在 Oracle SQL Developer 2.1 中执行此语句时,会弹出一个对话框 “输入替换变量”,要求输入 TOBAGO

的替换值
update t set country = 'Trinidad and Tobago' where country = 'trinidad & tobago';

如何避免这种情况,而不诉诸

chr(38)
u'trinidad \0026 tobago'
,这两者都掩盖了声明的目的?

oracle-database oracle-sqldeveloper
6个回答
234
投票

在查询之前调用此:

set define off;

或者,黑客:

update t set country = 'Trinidad and Tobago' where country = 'trinidad &' || ' tobago';

来自调整 SQL*Plus

SET DEFINE OFF 禁止解析要替换的命令 用它们的值替换变量。


16
投票

在 SQL*Plus 中,将

SET DEFINE ?
放在脚本顶部通常可以解决此问题。可能也适用于 Oracle SQL Developer。


1
投票

这将按照您的要求工作,无需 CHAR(38):

update t set country = 'Trinidad and Tobago' where country = 'trinidad & '|| 'tobago';

create table table99(col1 varchar(40));
insert into table99 values('Trinidad &' || '  Tobago');
insert into table99 values('Trinidad &' || '  Tobago');
insert into table99 values('Trinidad &' || '  Tobago');
insert into table99 values('Trinidad &' || '  Tobago');
SELECT * FROM table99;

update table99 set col1 = 'Trinidad and Tobago' where col1 = 'Trinidad &'||'  Tobago';

1
投票

如果使用liquibase运行sql文件,不会报错。但对于 sql 开发人员来说,在你的 sql sode 之前使用这个

set define off;


0
投票
虽然

set define off

 有效,但您会遇到无法在同一查询中使用替换变量作为 & 符号的问题。更清晰的方法是打开 Escape 字符,然后转义 & 符号。

例如,

set escape \ update t set country = 'Trinidad and Tobago' where country = 'trinidad \& tobago';
反斜杠(\)是默认的转义字符,但默认情况下似乎也是关闭的。


-3
投票
关闭扫描; 上面的命令也有效。

© www.soinside.com 2019 - 2024. All rights reserved.