一般情况下,我们使用单引号居多
但在字符集不一致的时候,双引号和单引号区别还是很大的
而且,使用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
我们在linux shell编程时
在设置变量的时候,可借用双引号或单引号来控制,单引号与双引号必须成对
若是单引号,则其内的特殊字符仅为一般字符
若是双引号,则其内的特殊字符,如$,可以保有原本的特性。如,var=“lang is $LANG",则echo $var,可得 lang is en_US
[root@localhost ~]# name=think
[root@localhost ~]# echo $name
think
[root@localhost ~]# ename="$name is my English name"
[root@localhost ~]# echo $ename
think is my English name
[root@localhost ~]# ename='$name is my English name'
[root@localhost ~]# echo $ename
$name is my English name
在Oracle中只有单引号才表示字符串,但在Linux中,无论单引号、双引号,均表示字符串
分享到:
相关推荐
linux启动oracle方法linux启动oracle方法linux启动oracle方法linux启动oracle方法linux启动oracle方法linux启动oracle方法linux启动oracle方法linux启动oracle方法linux启动oracle方法linux启动oracle方法linux启动...
SQL中存储过程中SQL语句的单引号和双引号问题[总结].pdf
ORACLE 单引号转义: 在ORACLE中,单引号有两个作用: 1:字符串是由单引号引用 2:转义。 单引号的使用是就近配对,即就近原则。而在单引号充当转义角色时相对不好理解 1.从第二个单引号开始被视为...
oracle目录结构,oracle_base、oracle_home 1. linux目录的操作命令(增,删,改,查,目录权限设置) 2. oracle文件操作命令(增,删,改,查,vi编辑文件) 3. oracle用户、组 (linux用户、组的操作命令、切换...
Oracle Linux,全称为Oracle Enterprise Linux,简称OEL,是Oracle公司在2006年初发布第一个版本,Linux发行版本之一,以对Oracle软件和硬件支持较好见长。OEL,一般人通常叫法为Oracle企业版Linux,由于Oracle提供...
oracle linux 7 自已总结和根据官方文档方法的双网卡绑定。还有注意事项。 !
LINUX下安装ORACLE LINUX下安装ORACLE
OracleClient-19C Oracle客户端,包括windows和Linux
Oracle Linux更新Yum源还是挺方便的,比Red Hat省事很多,而且在6.3的版本中,默认已经有重新编译可用的Yum了。
安装Oracle专用Linux操作系统 安装过程中,可以省去很多不必要的坑 OracleLinux-R6-U5-Server-x86_64-dvd.[V41362-01].iso
Linux下彻底删除11g oracle,简单方便,快速,命令删除。
Oracle12c双节点RAC在Linux7环境下的部署,本文档适用对象为 DBA 或具备一定 Linux/Oracle 基础知识的人员, 对 Oracle Enterprise Linux 操作系统下的 Oracle12.2.0.1 双节点 RAC 在 OEL 7.4 环境下的部署及初始化...
OracleLinux6.9安装详细图解
Linux版本 Oracle11g数据库 64位 完整安装包
linux和oracle数据库的加固资料
POWERDESIGNER生成oracle表名带有引号
在linux用qt访问oracle数据库需要自己编译oracle驱动qoci
关于oracle在linux5上的安装,内容详细,适合初学者
oracle在linux下无图形化界面的安装,静默安装详细步骤
oracle10在linux上的安装.doc