oracle 欄位 大小寫問題__oracle

來源:互聯網
上載者:User

今天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 identifierSQL> select "id" from test;id----------1SQL> select * from test;id----------1SQL> 


經反覆實驗,如果建表時欄位不加引號,則無論怎麼查詢都不會出現上述問題,後證明是大小寫問題. 繼續實驗:


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----------2SQL> select ID from test;ID----------2SQL> select * from test;ID----------2SQL> select "id" from test;select "id" from test       *ERROR at line 1:ORA-00904: "id": invalid identifierSQL> select "ID" from test;ID----------2SQL> 


具體如下:

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



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.