首页 > 解决方案 > SQL Developer 在我创建表时强制大写

问题描述

在此处输入图像描述当我使用 SQL Developer 创建表时,我的列和表名必须大写。我想使用小写,但我不知道该怎么做。

标签: sqloracleoracle-sqldeveloper

解决方案


这不是 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;

然后输出是:

表名 | COLUMN_NAME
:--------- | :----------
表名 | ID         

你可以这样做:

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

并且他们都会从该表中进行选择,因为 Oracle 会将未加引号的标识符隐式转换为大写。

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

如果你这样做:

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

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

SELECT table_name, column_name
FROM   user_tab_columns;
表名 | COLUMN_NAME
:--------- | :----------
表名 | ID         
表名 | ID         

要从第二个表中获取数据,您必须使用正确大小写的带引号的标识符:

SELECT "id" FROM "table_name";

db<>在这里摆弄

您可以引用标识符(在任何地方使用它们)并且可以使用小写标识符,或者 Oracle 会将未引用的标识符隐式转换为大写。

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


推荐阅读