在未设置 define off 的情况下命名 table 列时转义特殊字符

Escaping special characters when naming a table column without setting define off

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

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

select fieldA this&that from tableA

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

我尝试使用带或不带单引号的 'this' || chr(38) || 'that',但 SQL 开发人员都不喜欢。

有什么想法吗?

您需要引用标识符,但这是一个非常糟糕的主意;对各处列的每个引用也必须引用并完全匹配大小写。 See this, and the documentation,建议不要使用带引号的标识符。

如您所见,使用“&”符号是一个更糟糕的主意,因为它用于替换变量。要创建 table 然后在同一脚本中使用替换变量,您需要在创建之前关闭定义,然后再将它们重新打开:

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

但是您仍然不能在同一语句中引用 table 名称和替换变量,除非您将 define 设置为非标准的东西:

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

但是再次提及该专栏的所有内容以及大小写和引用也需要考虑到这一点。

我会认真地重新考虑并使其类似于 this_and_that,或者完全省略 'and' 部分,如果它没有真正添加任何东西(或者您的真实列名接近长度限制).

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

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