Oracle中的双引号与单引号

文章详细阐述了在Oracle数据库中,双引号和单引号在创建数据库对象如表空间、用户,以及处理用户密码、字段名称和字段值时的不同用法。双引号用于区分大小写,如表空间名和用户名,而单引号常用于字段值且区分大小写。密码无论是否加双引号都区分大小写,字段名不应加双引号,且单引号会导致被当作字符串处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

场景一:数据库对象名称

创建对象时,对象名称可以加双引号,不能加单引号。加双引号表示区分大小写,不加双引号表示默认大写

Example 1:创建表空间

SQL> create tablespace omf_tbs1;
Tablespace created.

SQL> create tablespace "omf_tbs2";
Tablespace created.

SQL> select tablespace_name from dba_tablespaces;

TABLESPACE_NAME
------------------------------
SYSTEM
SYSAUX
UNDOTBS1
TEMP
USERS
OMF_TBS1
omf_tbs2

SQL> create tablespace 'omf_tbs3';
create tablespace 'omf_tbs3'
                  *
ERROR at line 1:
ORA-02216: tablespace name expected

Example 2:创建用户及授权

SQL> create user miguel identified by "Xqc$689" default tablespace omf_tbs1;
User created.

SQL> create user "pablo" identified by Milf377 default tablespace omf_tbs2;
create user "pablo" identified by Milf377 default tablespace omf_tbs2
*
ERROR at line 1:
ORA-00959: tablespace 'OMF_TBS2' does not exist

SQL> create user "pablo" identified by Milf377 default tablespace "omf_tbs2";
User created.

SQL> select username from dba_users where username like 'MIGUEL';
USERNAME
--------------------------------------------------------------------------------
MIGUEL

SQL> select username from dba_users where username like 'pablo';
USERNAME
--------------------------------------------------------------------------------
pablo

SQL> create user 'Phoebe' identified by "Pwd3457";
create user 'Phoebe' identified by "Pwd3457"
            *
ERROR at line 1:
ORA-01935: missing user or role name

给用户授权的情况与上面类似,大写的用户名可以加也可以不加双引号,小写的用户名要加双引号。但是不能给用户名加单引号。

SQL> grant create session to miguel;
Grant succeeded.

SQL> grant resource,connect to "MIGUEL";
Grant succeeded.

SQL> grant create session to pablo;
grant create session to pablo
                        *
ERROR at line 1:
ORA-01917: user or role 'PABLO' does not exist

SQL> grant create session to "pablo";
Grant succeeded.

SQL> grant resource,connect to 'pablo';
grant resource,connect to 'pablo'
                          *
ERROR at line 1:
ORA-00987: missing or invalid username(s)

Example 3:用户登录

对于小写的用户名,登录时要加双引号。

SQL> conn miguel/Xqc$689
Connected.

SQL> conn MIGUEL/Xqc$689
Connected.

SQL> conn pablo/Milf377
ERROR:
ORA-01017: invalid username/password; logon denied

Warning: You are no longer connected to ORACLE.
SQL> conn "pablo"/Milf377
Connected.

使用SQLPlus在终端登录时,注意对用户名和密码中的特殊字符进行转义(比如引号、$等)。

[oracle@oracledb ~]$ sqlplus miguel/Xqc$689

ERROR:
ORA-01017: invalid username/password; logon denied

[oracle@oracledb ~]$ sqlplus miguel/Xqc\$689   -- 这里$前有一个转义符\
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0

[oracle@oracledb ~]$ sqlplus "pablo"/Milf377

ERROR:
ORA-01017: invalid username/password; logon denied

[oracle@oracledb ~]$ sqlplus \"pablo\"/Milf377
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0

场景二:用户密码

创建用户时,密码可以也可以不加双引号。不管加不加双引号,密码都区分大小写。密码不能加单引号

SQL> create user miguel identified by "Xqc$689" default tablespace omf_tbs1;
User created.

SQL> create user "pablo" identified by Milf377 default tablespace "omf_tbs2";
User created.

SQL> create user phoebe identified by 'Jojo666';
create user phoebe identified by 'Jojo666'
                                 *
ERROR at line 1:
ORA-00988: missing or invalid password(s)

场景三:字段(列)名称

对于列名称,不能加双引号;如果加了单引号,字段名称会被转化成纯字符串

SQL> select tablespace_name from dba_tablespaces;
TABLESPACE_NAME
------------------------------
SYSTEM
SYSAUX
UNDOTBS1
TEMP
USERS
OMF_TBS1
omf_tbs2

7 rows selected.

SQL> select "TBALESPACE_NAME" from dba_tablespaces;
select "TBALESPACE_NAME" from dba_tablespaces
       *
ERROR at line 1:
ORA-00904: "TBALESPACE_NAME": invalid identifier

SQL> select 'TBALESAPCE_NAME' from dba_tablespaces;
'TBALESAPCE_NAME'
----------------
TBALESAPCE_NAME
TBALESAPCE_NAME
TBALESAPCE_NAME
TBALESAPCE_NAME
TBALESAPCE_NAME
TBALESAPCE_NAME
TBALESAPCE_NAME

7 rows selected.

SQL> select sysdate from dual;
SYSDATE
---------
12-JAN-23

SQL> select "SYSDATE" from dual;
ERROR:
ORA-01741: illegal zero-length identifier

SQL> select 'sysdate' from dual;
'SYSDATE'
---------
sysdate

场景四:字段(列)的值

对于字段的值,必须加单引号,并且区分大小写。

示例1

SQL> select username from dba_users where username like "MIGUEL";
select username from dba_users where username like "MIGUEL"
                                                   *
ERROR at line 1:
ORA-00904: "MIGUEL": invalid identifier

SQL> select username from dba_users where username like MIGUEL;
select username from dba_users where username like MIGUEL
                                                   *
ERROR at line 1:
ORA-00904: "MIGUEL": invalid identifier

SQL> select username from dba_users where username like 'MIGUEL';
USERNAME
--------------------------------------------------------------------------------
MIGUEL

SQL> select username from dba_users where username like 'pablo';
USERNAME
--------------------------------------------------------------------------------
pablo

示例2

SQL> select username from dba_users where username="pablo";
select username from dba_users where username="pablo"
                                              *
ERROR at line 1:
ORA-00904: "pablo": invalid identifier

SQL> select username from dba_users where username=pablo;
select username from dba_users where username=pablo
                                              *
ERROR at line 1:
ORA-00904: "PABLO": invalid identifier

SQL> select username from dba_users where username='pablo';
USERNAME
--------------------------------------------------------------------------------
pablo

SQL> select username from dba_users where username='PABLO';
no rows selected

📖总的来说,单双引号的使用大致满足以下规则:

  • 对于对象名称(例如用户名、表空间名),不能使用单引号(因为会被转化为纯字符串);可以使用双引号,此时区分大小写。
  • 对于用户密码,不能使用单引号;可以使用双引号,不管加不加双引号,都区分大小写。
  • 对于字段(列)的名称,不能使用双引号;如果使用单引号,则会被转化为纯字符串。
  • 对于字段(列)的值,必须加单引号,并且区分大小写。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GottdesKrieges

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值