Oracle双引号和单引号的区别小结

 一般情况下,我们使用单引号居多。但在字符集不一致的时候,双引号和单引号区别还是很大的而且,使用ODBC桥导入外部数据的时候,表名是带双引号的
  先看个案例:以前遇到过一个这样的问题。一个朋友在创建表时,表名采用小写,并且表名用双引号括了起来,表已经创建了,但是在查询的时候,显示表名不存在,可在user_tables又能看到这张表。观察得出,加了双引号的小写表名存入数据库后也是小写。用双引号扩起来的标识符都作为原来的大小写格式存放在数据字典中,而Oracle在调用时,默认的使用大写格式去数据字典中查询。
  以列名为例:

复制内容到剪贴板
代码:
sys@EMREP> create table test(a varchar2(10), a varchar2(10));

create table test(a varchar2(10), a varchar2(10))
                                  *
ERROR at line 1:
ORA-00957: duplicate column name
sys@EMREP> create table test("a" varchar2(10), a varchar2(10));

Table created.

sys@EMREP> SELECT table_name, column_name FROM user_tab_cols WHERE table_name = 'TEST';

TABLE_NAME                     COLUMN_NAME
------------------------------ ------------------------------
TEST                           a
TEST                           A
sys@EMREP> insert into test values ('1','1');

1 row created.

sys@EMREP> commit;

Commit complete.

sys@EMREP> select * from test;

a          A
---------- ----------
1          1
  以大写方式存在数据字典中,验证一下:
sys@EMREP> create table test_xxxx(a varchar2(1), "A" varchar2(1));
create table test_xxxx(a varchar2(1), "A" varchar2(1))
                                      *
ERROR at line 1:
ORA-00957: duplicate column name

  双引号括起来的更确切一点叫 "引证标识符"。
  比如我们创建一张表,我们在写CREATE语句的时候,就算表名用小写,数据字典里存储的所有标识符还是大写的,但是要想在数据字典里存储小写的标识符,那写CREATE语句的时候就得用双引号。 
  所以要标识符区分大小写,或在标识符中包含空格,或者使用保留字做标识符,就得用双引号括起来的引证标识符。


 双引号:
   ① 表示其内部的字符串严格区分大小写
   ② 用于特殊字符或关键字
   ③ 不受标识符规则限制
   ④ 会被当成一个列来处理
   ⑤ 当出现在to_char的格式字符串中时,双引号有特殊的作用,就是将非法的格式符包装起来
  
 避免出现ORA-01821: date format not recognized错误, to_char在处理格式字符串时,会忽略双引号
复制内容到剪贴板
代码:
sys@EMREP> select to_char(sysdate, 'hh24"小时"mi"分"ss"秒"') AS RESULT from dual;

RESULT
------------------
17小时31分30秒

  单引号:
    ① 表示字符串常量
    ② 字符串中的双引号仅仅被当作一个普通字符进行处理。此时,双引号不需要成对出现
                  
 例如:
复制内容到剪贴板
代码:
sys@EMREP> select 'hh24"小时""mi"分"""ss"秒"' AS RESULT from dual;

RESULT
-----------------------------
hh24"小时""mi"分"""ss"秒"

  ③ 动态SQL:
     在一对单引号包含的语句中,必须有一对相邻的单引号表示一个单引号
     两个相邻的单引号的作用,第一个是用来表示转义字符,后面一个表示真正的单引号
     单引号里要用单引号应该是两个连续的单引号,而不是双引号
  
 例如:
复制内容到剪贴板
代码:
select 'alter system kill session ''''|| sid||','||serial#|| '''';' from v$session

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值