在我发布问题之前,我在本网站上阅读了有关如何在插入新字段值或在where子句中查找字段名称时如何转义特殊字符的各种帖子。我没有找到的是当你想用一个表命名表或列时如何转义特殊字符。
所以,我想将fieldA命名为this&that
,例如
select fieldA this&that from tableA
我还想在同一个查询中使用替换变量(&var
),因此set define off
无济于事。
我尝试使用带有或不带单引号的'this' || chr(38) || 'that'
,但SQL Developer也不喜欢。
有什么想法吗?
答案 0 :(得分:0)
你需要引用标识符,但这是一个非常糟糕的主意;每个对列的引用都必须引用并完全匹配案例。 See this和the 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;