在DDL语句中,Oracle是否区分大小写?

18 浏览
0 Comments

在DDL语句中,Oracle是否区分大小写?

以下无法执行:

create table product_instance (
  "ID" number(19,0),
  constraint pro_instance_pk primary key ("id")
)

输出结果为:

SQL错误:ORA-00904: "id":无效的标识符
00904. 00000 -  "%s: 无效的标识符"

然而,将"id"更改为"ID"可以正常工作:

create table product_instance (
  "ID" number(19,0),
  constraint pro_instance_pk primary key ("ID")
)

以下也可以正常工作:

create table product_instance (
  ID number(19,0),
  constraint pro_instance_pk primary key (id)
)

如果有人能回答在DDL语句中指定"ID"而不仅仅是id的影响,将不胜感激。Oracle是大小写敏感的还是不敏感的?

0
0 Comments

Oracle在DDL语句中是不区分大小写的。在创建表时,我们不能在字段名中使用双引号("")。

 sql>create table product_instance (
     "ID" number(19,0)***,***
      constraint pro_instance_pk primary key ("ID")
      )

这段代码无法在sql提示符中执行。

而且,在表上应用约束时,数据类型和约束之间不应该有分号。

在DDL中使用双引号会使Oracle区分大小写。发布的脚本确实可以运行,因为那是逗号而不是分号;逗号是在定义表级约束时的正确语法。

0
0 Comments

在Oracle中,DDL语句(数据定义语言)是区分大小写的。这意味着在创建表、列或其他数据库对象时,如果使用引号将其括起来,它们的名称将被视为区分大小写的。

这种行为在使用保留字作为列或表名时特别让人头疼。例如,如果一个列名是"exclusive",它将无法匹配"EXCLUSIVE",因为它们被视为不同的名称。

这个问题的出现原因可以追溯到Oracle的设计决策。根据设计者的意图,引号是用来识别特殊字符或保留字的。当使用引号括起来的数据库对象名称时,Oracle会将其视为字面值,而不会将其转换为大写或小写。这种设计在某些情况下可以提供更大的灵活性,但也会导致一些不便之处。

解决这个问题的方法是尽量避免在数据库对象的命名中使用引号。如果必须使用引号,可以通过在引号中使用适当的大小写来确保正确的匹配。例如,如果要匹配大小写的列名"exclusive",可以使用以下DDL语句:

CREATE TABLE my_table (
    "exclusive" VARCHAR2(50)
);

在这个例子中,使用了带引号的列名"exclusive",它将与任何使用相同大小写的引用匹配。

,Oracle的DDL语句是大小写敏感的,这会导致在使用引号时出现一些问题,特别是在使用保留字作为数据库对象名称时。为了避免这些问题,尽量避免使用引号,并使用适当的大小写来确保正确的匹配。

0