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.
...
- 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 会在幕后隐式转换大小写,这不是一件坏事。
这不是 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.
...
- 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 会在幕后隐式转换大小写,这不是一件坏事。