SQL 当我创建 table 时开发者强制大写

SQL Developer forces capitalization when I create a table

当我用 SQL Developer 创建一个 table 时,我的专栏和 table 的名称必须大写。我想用小写,但是不知道怎么写。

这不是 SQL 开发人员所做的;它由 Oracle 数据库完成,并且是默认行为。

来自 Oracle's Database Object Names and Qualifiers 文档:

Database Object Naming Rules

Every database object has a name. In a SQL statement, you represent the name of an object with a quoted identifier or a nonquoted identifier.

  • A quoted identifier begins and ends with double quotation marks ("). If you name a schema object using a quoted identifier, then you must use the double quotation marks whenever you refer to that object.
  • A nonquoted identifier is not surrounded by any punctuation.

You can use either quoted or nonquoted identifiers to name any database object.

...

  1. Nonquoted identifiers are not case sensitive. Oracle interprets them as uppercase. Quoted identifiers are case sensitive.

这意味着如果您创建任何标识符,Oracle 会将其转换为大写以将其存储在数据字典中,这就是 Oracle 设计的行为方式。

所以:

CREATE TABLE table_name (
  id INT PRIMARY KEY
);

那么如果你查看数据字典:

SELECT table_name, column_name
FROM   user_tab_columns;

则输出为:

TABLE_NAME | COLUMN_NAME
:--------- | :----------
TABLE_NAME | ID         

你可以这样做:

SELECT id FROM table_name;
SELECT ID FROM TABLE_NAME;
SELECT Id FROM TaBlE_nAmE;
SELECT "ID" FROM "TABLE_NAME";

他们会从 table 全部 select 因为 Oracle 会隐式地将未加引号的标识符转换为大写。

如果您引用标识符,那么 Oracle 将在您键入它们时将这些标识符保持在相同的大小写中,但是您需要 始终 在您引用该标识符时引用它们。

如果你这样做:

CREATE TABLE "table_name" (
  "id" INT PRIMARY KEY
);

那么数据字典现在将包含两个 tables,一个大写和一个小写:

SELECT table_name, column_name
FROM   user_tab_columns;
TABLE_NAME | COLUMN_NAME
:--------- | :----------
TABLE_NAME | ID         
table_name | id         

要从那一秒获取数据 table,您必须使用带引号的标识符和正确的大小写:

SELECT "id" FROM "table_name";

db<>fiddle here

您要么引用标识符(在所有使用它们的地方)并且可以使用小写标识符,否则 Oracle 会隐式地将未引用的标识符转换为大写。

为自己简化事情,如果您手动编写 SQL 查询,只需使用不带引号的标识符并接受 Oracle 会在幕后隐式转换大小写,这不是一件坏事。