sql - 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;
然后输出是:
表名 | 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 将在幕后隐式转换大小写,这不是一件坏事。
推荐阅读
- algorithm - 如何获取对二叉树中最后一个(尚未填充的)元素的引用?
- linux - 如何离线安装 rpm 包及其依赖项
- python - PySpark 中的微秒时间戳
- restsharp - RestSharp_106.3.0 在 VS.NET 2017 v4.5 上安装失败
- javascript - 如何使用数组选择复选框名称
- javascript - 我如何修复:无法使用 formData 上传图片(浏览器兼容性)
- xamarin - MvvmCross:将 nint 绑定到枚举并将其双向转换
- html - 电子邮件不能以下划线 html 5 模式开头
- gradle - 未找到 ID 为“id”的插件(gradle 自定义插件)
- google-cloud-platform - agones和spatial OS有什么区别