使用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
4条答案
按热度按时间yzckvree1#
带引号的标识符问题
带引号的标识符可以成功地用于几乎任何Oracle对象,包括用户。理论上,它们可以在任何地方工作。在实践中,您会遇到带引号的标识符的许多不便和问题。
来自SQL语言参考:“注意:Oracle不建议对数据库对象名称使用带引号的标识符。SQL*Plus接受这些带引号的标识符,但在使用其他管理数据库对象的工具时,它们可能无效。”
一旦你使用了双引号,对该对象的每个引用都必须使用双引号,并且大小写正确。你会发现很多工具不总是使用双引号的问题。还有脚本查看元数据时不总是添加双引号的问题。带引号的标识符只是在自找麻烦。
Oracle为什么有带引号的标识符?
这个问题很难回答,但我想限制对象使用的字符类型会使解析变得容易得多。SQL已经有很多关键字,并且有许多奇怪的语言歧义。如果对象名称以数字开头,那么将很难区分真实的数字和对象。
例如,如果没有带引号的标识符,这个简单的语句可能会一团糟:
字符串
如果不限制对象名,1.1可能是一个巨大的数字,解析器必须查找名为“1”的对象,然后是名为“1”的依赖对象,然后确定它是否优先于数字“1.1”。
奇怪的名字在语言中是可能的,但我假设当有人在40年前编写第一个SQL编译器时,他们决定不把他们的生活变得如此复杂,只是为了适应一些奇怪的名字。
qco9c6ql2#
检查用户名是否不存在于保留字中,并且不以数字开头:
字符串
brccelvz3#
如果您正在创建用户,请尝试以下操作:
字符串
b4lqfgs44#
检查你的连接类型是否是cdb.如果是cdb如下面image所示
在创建用户的命令中的用户名前使用前缀c##