Oracle用户名以数字开头是否有问题?-用户名在引号中

368yc8dk  于 2023-11-17  发布在  Oracle
关注(0)|答案(4)|浏览(209)

使用Oracle 11 gR 2
您不能创建以数字开头的用户名:

SQL> create user 123 identified by temp;
create user 123 identified by temp
            *
ERROR at line 1:
ORA-01935: missing user or role name

字符串
但是,您可以将其创建为:

SQL> create user "123" identified by temp;

User created.


有人知道这类用户可能存在的问题吗?
有人知道甲骨文的规则/原因,为什么你不能创建它没有引号,即,有用户名以数字开头?
Thanks in advance

yzckvree

yzckvree1#

带引号的标识符问题

带引号的标识符可以成功地用于几乎任何Oracle对象,包括用户。理论上,它们可以在任何地方工作。在实践中,您会遇到带引号的标识符的许多不便和问题。
来自SQL语言参考:“注意:Oracle不建议对数据库对象名称使用带引号的标识符。SQL*Plus接受这些带引号的标识符,但在使用其他管理数据库对象的工具时,它们可能无效。”
一旦你使用了双引号,对该对象的每个引用都必须使用双引号,并且大小写正确。你会发现很多工具不总是使用双引号的问题。还有脚本查看元数据时不总是添加双引号的问题。带引号的标识符只是在自找麻烦。

Oracle为什么有带引号的标识符?

这个问题很难回答,但我想限制对象使用的字符类型会使解析变得容易得多。SQL已经有很多关键字,并且有许多奇怪的语言歧义。如果对象名称以数字开头,那么将很难区分真实的数字和对象。
例如,如果没有带引号的标识符,这个简单的语句可能会一团糟:

select 1.1 + 2.2 from some_table;

字符串
如果不限制对象名,1.1可能是一个巨大的数字,解析器必须查找名为“1”的对象,然后是名为“1”的依赖对象,然后确定它是否优先于数字“1.1”。
奇怪的名字在语言中是可能的,但我假设当有人在40年前编写第一个SQL编译器时,他们决定不把他们的生活变得如此复杂,只是为了适应一些奇怪的名字。

qco9c6ql

qco9c6ql2#

检查用户名是否不存在于保留字中,并且不以数字开头:

SELECT  *
FROM v$reserved_words
ORDER BY keyword

字符串

brccelvz

brccelvz3#

如果您正在创建用户,请尝试以下操作:

alter session set "_ORACLE_SCRIPT"=true;

CREATE USER oe IDENTIFIED BY oe;

字符串

b4lqfgs4

b4lqfgs44#

检查你的连接类型是否是cdb.如果是cdb如下面image所示
在创建用户的命令中的用户名前使用前缀c##

相关问题