oracle 字段 大小写问题

今天create一个表的时候, 字段加了引号,结果select 该字段的时候告诉字段找不着,示例如下:


SQL> create table test("id" varchar2(10));

Table created.

SQL> desc test;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 id                                                 VARCHAR2(10)

SQL> insert into test values('1');

1 row created.

SQL> commit;

Commit complete.

SQL> select id from test;
select id from test
       *
ERROR at line 1:
ORA-00904: "ID": invalid identifier


SQL> select "id" from test;

id
----------
1

SQL> select * from test;

id
----------
1

SQL> 


经反复实验,如果建表时字段不加引号,则无论怎么查询都不会出现上述问题,后证明是大小写问题. 继续实验:


SQL> create table test(id varchar2(10));
Table created.

SQL> desc test
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 ID                                                 VARCHAR2(10)

SQL> insert into test values('2');   
1 row created.

SQL> commit;
Commit complete.

SQL> select id from test;
ID
----------
2

SQL> select ID from test;
ID
----------
2

SQL> select * from test;
ID
----------
2

SQL> select "id" from test;
select "id" from test
       *
ERROR at line 1:
ORA-00904: "id": invalid identifier

SQL> select "ID" from test;
ID
----------
2

SQL> 


具体如下:

id=ID="ID"    第1个id默认转换成大写ID, 第二个ID也默认转换成大写ID, 第三个不作转换, 由于引号引住,本身就是大写, 所以三个相等.

(上面一行不等于下面一行)

"id"="id"     第1个"id"由于是引号引住,并且是小写, 所以引用该字段时只能用"id"引用,其它任何形式都会报错.



结论: oracle 的字段, 在不加引号时, 全部默认转换成大写.

                                       加引号时, 则不会自动转换, 写成什么样就是什么样, 在引用该字段时,如果大小写不匹配则报错 ORA-00904: "id": invalid identifier



由于存在上述特性,则可能出现2个字段名称一样的现象, 如下:


SQL> drop table test;
Table dropped.

SQL> create table test("id" varchar2(10), id varchar2(10));
Table created.

SQL> desc test;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 id                                                 VARCHAR2(10)
 ID                                                 VARCHAR2(10)

SQL> insert into test values('3','3');
1 row created.

SQL> select * from test;
id         ID
---------- ----------
3          3



Oracle中,字段名默认是不区分大小写的。当你在写查询语句时,大小写对于字段名是没有影响的,结果都是一样的。这是因为Oracle会默认将你写的脚本全部转换为大写。然而,如果你在建表语句中使用了双引号来表示字段名,那么Oracle将会严格区分大小写。这意味着,当你使用双引号来定义字段名时,你必须在查询语句中使用相同的大小写来引用这些字段。所以,要回答你的问题,一般情况下,Oracle字段名是不区分大小写的,除非你在建表语句中使用了双引号来表示字段名。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [oracle字段区分大小写(一)](https://blog.csdn.net/chaofanashuai/article/details/106509004)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [oracle表名、字段名大小写问题。](https://blog.csdn.net/weixin_30633949/article/details/99846140)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值