创建表时,SQLDeveloper强制大写

当我使用 SQL Developer 创建表时,我的列和表名必须大写。我想使用小写,但我不知道该怎么做。

回答

这不是 SQL Developer 所做的;它由 Oracle 数据库完成并且是默认行为。

来自Oracle 的数据库对象名称和限定符文档:

数据库对象命名规则

每个数据库对象都有一个名称。在 SQL 语句中,您用带引号的标识符或不带引号的标识符表示对象的名称。

  • 带引号的标识符以双引号 (") 开头和结尾。如果使用带引号的标识符命名架构对象,则在引用该对象时必须使用双引号。
  • 未加引号的标识符没有被任何标点符号包围。

您可以使用带引号或不带引号的标识符来命名任何数据库对象。

...

  1. 不带引号的标识符不区分大小写。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 会在幕后隐式转换大小写,这不是一件坏事。


以上是创建表时,SQLDeveloper强制大写的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>