[TL;DR] 最简单的做法是永远不要在对象名称周围使用双引号,而让 oracle 以其默认方式管理区分大小写,如果您通过 dblink 引用区分大小写的数据库中的列,则命名那些大写的列,因此您不必在 Oracle 中使用双引号。
默认情况下,Oracle 数据库区分大小写;但是,默认情况下,它们也会将所有内容都转换为大写,以便从您(用户)那里抽象出区分大小写。
CREATE TABLE emp ( empid NUMBER(12,0) );
然后:
SELECT empid FROM emp;
SELECT Empid FROM emp;
SELECT EMPID FROM emp;
SELECT eMpId FROM emp;
SELECT "EMPID" FROM emp;
都会给出相同的输出并且:
SELECT TABLE_NAME, COLUMN_NAME FROM USER_TAB_COLUMNS;
输出:
TABLE_NAME COLUMN_NAME
---------- -----------
EMP EMPID
(注意表名是大写的)。
如果您使用双引号,那么 oracle 将尊重您在对象标识符中使用大小写:
CREATE TABLE emp ( "empid" NUMBER(12,0) );
然后:
SELECT TABLE_NAME, COLUMN_NAME FROM USER_TAB_COLUMNS;
输出:
TABLE_NAME COLUMN_NAME
---------- -----------
EMP empid
(注意:Oracle 已尊重该empid
列的大小写敏感性)。
现在您只能使用以下方法引用该列:
SELECT "empid" FROM emp;
这些查询将失败:
SELECT empid FROM emp;
SELECT Empid FROM emp;
SELECT EMPID FROM emp;
SELECT eMpId FROM emp;
SELECT "EMPID" FROM emp;
由于Oracle会将标识符转换为大写并且没有EMPID
列,只有一empid
列。
使用双引号来引用该列或重命名该列EMPID
以允许您利用 Oracle 的默认行为,即从用户那里抽象出区分大小写(但这可能会破坏其他在非大写上使用双引号的查询)案例列名)。