关于Oracle中的双引号和命名规则的一点猜想

© Young 2016-04-04 14:34
Welcome to My GitHub

基本前提

一直以为Oracle中的命名规则和java中变量的命名规则大同小异。

问题一

SQL> create table "liy" ("no" number,"name" varchar2(10));
SQL> Table created
SQL> select * from "liy";
            no name
    ---------- ----------

这个创建表的SQL在Oracle 11g中会执行成功,而且表空间确实存在该表,但是向该表插入数据的时候有一些要注意的地方。

SQL> insert into liy(no,name) values (14,'liy');
SQL> ORA-00942:表或者视图不存在

在插入数据的时候如果表名或者字段名不加双引号就会报错”表不存在,或者是字段未定义“。

但是下面这种方式却是可以的:

SQL> insert into "liy"("no","name") values (14,'liy');
SQL> 1 row inserted
SQL> select * from "liy";
            no name
    ---------- ----------
            14 liy

到这我就在猜想:难道表名和字段名都变成双引号加上字母的组合了?但是这不就和Oracle的命名规则相违背了吗?

注意到表中的字段名是小写的,然后又建了一张表,并插入数据

SQL> create table "LIY"("NO" number,"NAME" varchar2(10));
SQL> Table created
SQL> insert into "LIY"("NO","NAME") values(14,'liy');
SQL> 1 row inserted
SQL> select * from "LIY";
            NO NAME
    ---------- ----------
            14 liy

这种方式上边早就证明是可以成功的,奇怪的事情在下边:

SQL> insert into liy(no,name) values(35,'zth');
SQL> 1 row inserted
SQL> select * from "LIY";
            NO NAME
    ---------- -----