我可以使用 Oracle 转义列标题中的双引号吗?

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

创建一个带有双引号的表来转义真正的双引号在Oracle的SQL语法中似乎不起作用:

CREATE TABLE "MyTable" (
"Col""umn 1" varchar(168)
);

以上失败。有什么办法可以转义双引号来制作 'Col"umn 1' 吗?

sql database oracle header escaping
4个回答
10
投票

你不能。 根据文档

非引号标识符只能包含字母数字字符 您的数据库字符集和下划线 (_)、美元符号 ($)、 和井号 (#)。数据库链接还可以包含句点 (.) 和 “at”符号 (@)。 Oracle 强烈建议您不要在中使用 $ 和 # 不带引号的标识符。

引用的标识符可以包含任何字符和标点符号 以及空格。但是,无论是带引号还是不带引号的标识符 可以包含双引号或空字符 ( )。


2
投票

当然,您可以使用 unicode!

SELECT
    1 "“Unicode Rocks”",
    2 "ʺSooo cooolʺ",
    3 ""My co-workers love me""
FROM DUAL

0
投票

也许这会有所帮助......但请不要创建包含此类列的表:

CREATE TABLE DropMe AS
SELECT rpad('X', 168, ' ') "Col''umn1" FROM dual
/

SELECT * FROM DropMe
/

SQL>

Col"umn1
-------------------------------------.....
X           

0
投票

可以创建带有双引号的列,无论文档如何声明。这可能是一个基于 Oracle 从内联视图中自动命名非别名表达式的方式的错误。

SQL> create table "MyTable" as
  2  select * from (select 'Col""umn 1' from dual where 1 = 0);

Table created.

SQL> insert into "MyTable" values ('A');

1 row created.

SQL> select * from "MyTable";

'COL""UMN1
----------
A

1 row selected.

SQL>

但是您确实不想想要创建这样的列,因为它们由于多种原因而损坏。虽然

SELECT *
可以工作,但据我所知,没有办法直接引用该列。而且列名甚至不完全是指定的 - 请注意列名中额外的单引号和缺少的空格。如果在表上创建视图,该视图将被创建但不能被引用。并且可能还有许多其他错误与这种损坏的列名称相关。

如果您发现自己处于这种情况,您甚至无法更改表格来修复名称;您需要删除并重新创建该表。

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