创建表时,SQLDeveloper强制大写
当我使用 SQL Developer 创建表时,我的列和表名必须大写。我想使用小写,但我不知道该怎么做。
回答
这不是 SQL Developer 所做的;它由 Oracle 数据库完成并且是默认行为。
来自Oracle 的数据库对象名称和限定符文档:
数据库对象命名规则
每个数据库对象都有一个名称。在 SQL 语句中,您用带引号的标识符或不带引号的标识符表示对象的名称。
- 带引号的标识符以双引号 (") 开头和结尾。如果使用带引号的标识符命名架构对象,则在引用该对象时必须使用双引号。
- 未加引号的标识符没有被任何标点符号包围。
您可以使用带引号或不带引号的标识符来命名任何数据库对象。
...
- 不带引号的标识符不区分大小写。Oracle 将它们解释为大写。带引号的标识符区分大小写。
这意味着如果您创建任何标识符,那么 Oracle 会将其转换为大写以将其存储在数据字典中,这就是 Oracle 设计的行为方式。
所以:
CREATE TABLE table_name (
id INT PRIMARY KEY
);
然后,如果您查看数据字典:
SELECT table_name, column_name
FROM user_tab_columns;
SELECT table_name, column_name
FROM user_tab_columns;
然后输出是:
TABLE_NAME | COLUMN_NAME :--------- | :---------- TABLE_NAME | ID
你可以这样做:
TABLE_NAME | COLUMN_NAME :--------- | :---------- TABLE_NAME | ID
它们都将从该表中进行选择,因为 Oracle 会将未加引号的标识符隐式转换为大写。
如果您引用标识符,那么 Oracle 会将这些标识符保留在与您键入它们相同的大小写中,但是每当您引用该标识符时,您都需要始终引用它们。
如果你这样做:
SELECT id FROM table_name;
SELECT ID FROM TABLE_NAME;
SELECT Id FROM TaBlE_nAmE;
SELECT "ID" FROM "TABLE_NAME";
那么数据字典现在将包含两个表,一个大写和一个小写:
CREATE TABLE "table_name" (
"id" INT PRIMARY KEY
);
TABLE_NAME | COLUMN_NAME :--------- | :---------- TABLE_NAME | ID 表名| ID
并从第二个表中获取数据,您必须使用带正确大小写的带引号的标识符:
db<>在这里摆弄
您可以引用标识符(在任何使用它们的地方)并且可以使用小写标识符,或者 Oracle 会将未引用的标识符隐式转换为大写。
让事情变得简单,如果您手动编写 SQL 查询,只需使用不带引号的标识符并接受 Oracle 会在幕后隐式转换大小写,这不是一件坏事。