在没有设置定义关闭

时间:2015-10-21 11:21:15

标签: sql oracle oracle-sqldeveloper

在我发布问题之前,我在本网站上阅读了有关如何在插入新字段值或在where子句中查找字段名称时如何转义特殊字符的各种帖子。我没有找到的是当你想用一个表命名表或列时如何转义特殊字符。

所以,我想将fieldA命名为this&that,例如

select fieldA this&that from tableA

我还想在同一个查询中使用替换变量(&var),因此set define off无济于事。

我尝试使用带有或不带单引号的'this' || chr(38) || 'that',但SQL Developer也不喜欢。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

你需要引用标识符,但这是一个非常糟糕的主意;每个对列的引用都必须引用并完全匹配案例。 See thisthe documentation,建议不要使用带引号的标识符。

使用&符号是一个更糟糕的想法,因为它用于替换变量,正如您所看到的那样。要创建表,然后在同一个脚本中使用替换变量,您需要在创建之前关闭定义,然后再将它们重新打开:

set define off
create table bad_idea("this&that" number);
set define on

但是你仍然无法在同一个语句中引用表名和替换变量,除非你将define设置为非标准的东西:

set define "^"
insert into bad_idea("this&that") values (^var);

但是,所有引用该列的内容也需要考虑到这一点,以及案例和引用。

我会认真重新考虑并使其成为类似this_and_that的内容,或者如果它没有真正添加任何内容(或者您的真实列名称接近长度限制),则完全省略'和'部分。

如果你只需要它作为列别名,你可以做同样的事情,它会稍微减轻痛苦,但仍然不理想:

set define "^"
select fieldA "this&that" from tableA where fieldB = ^var;