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



  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值