创建一个带有双引号的表来转义真正的双引号在Oracle的SQL语法中似乎不起作用:
CREATE TABLE "MyTable" (
"Col""umn 1" varchar(168)
);
以上失败。有什么办法可以转义双引号来制作 'Col"umn 1' 吗?
你不能。 根据文档:
非引号标识符只能包含字母数字字符 您的数据库字符集和下划线 (_)、美元符号 ($)、 和井号 (#)。数据库链接还可以包含句点 (.) 和 “at”符号 (@)。 Oracle 强烈建议您不要在中使用 $ 和 # 不带引号的标识符。
引用的标识符可以包含任何字符和标点符号 以及空格。但是,无论是带引号还是不带引号的标识符 可以包含双引号或空字符 ( )。
当然,您可以使用 unicode!
SELECT
1 "“Unicode Rocks”",
2 "ʺSooo cooolʺ",
3 ""My co-workers love me""
FROM DUAL
也许这会有所帮助......但请不要创建包含此类列的表:
CREATE TABLE DropMe AS
SELECT rpad('X', 168, ' ') "Col''umn1" FROM dual
/
SELECT * FROM DropMe
/
SQL>
Col"umn1
-------------------------------------.....
X
您可以创建带有双引号的列,无论文档如何声明。这可能是一个基于 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 *
可以工作,但据我所知,没有办法直接引用该列。而且列名甚至不完全是指定的 - 请注意列名中额外的单引号和缺少的空格。如果在表上创建视图,该视图将被创建但不能被引用。并且可能还有许多其他错误与这种损坏的列名称相关。
如果您发现自己处于这种情况,您甚至无法更改表格来修复名称;您需要删除并重新创建该表。