127

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

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

我怎样才能避免这种情况而不诉诸于chr(38)u'trinidad \0026 tobago'两者都掩盖了声明的目的?

4

5 回答 5

218

在查询之前调用它:

set define off;

或者,hacky:

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

调整 SQL*Plus

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

于 2010-02-25T12:46:05.117 回答
16

在 SQL*Plus 中,放在SET DEFINE ?脚本顶部通常可以解决这个问题。也可能适用于 Oracle SQL Developer。

于 2010-02-25T12:49:00.680 回答
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';
于 2018-10-08T05:51:50.373 回答
0

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

于 2021-08-06T05:43:15.187 回答
-3

设置扫描关闭;上面的命令也有效。

于 2016-08-08T07:16:29.883 回答