使用Oracle 11gR2
您无法创建以数字开头的用户名:
SQL> create user 123 identified by temp;
create user 123 identified by temp
*
ERROR at line 1:
ORA-01935: missing user or role name
Run Code Online (Sandbox Code Playgroud)
但是,您可以将其创建为:
SQL> create user "123" identified by temp;
User created.
Run Code Online (Sandbox Code Playgroud)
有人知道此类用户可能存在的问题吗?
有人知道 Oracle 规则/原因,为什么你不能在没有引号的情况下创建它,即用户名以数字开头?
提前致谢
带引号的标识符可以成功地用于几乎所有 Oracle 对象,包括用户。理论上,它们在任何地方都可以工作。在实践中,您会遇到带引号的标识符带来的许多不便和问题。
来自SQL 语言参考:“注意:Oracle 不建议对数据库对象名称使用带引号的标识符。这些带引号的标识符被 SQL*Plus 接受,但在使用管理数据库对象的其他工具时它们可能无效。”
一旦使用双引号,对该对象的每个引用都必须使用双引号,并且大小写正确。您会发现不总是使用双引号的工具存在很多问题。以及查看元数据并且并不总是添加双引号的脚本的问题。引用的标识符只是自找麻烦。
这个问题很难回答,但我猜想限制对象使用的字符类型会使解析变得更容易。SQL 已经有很多关键字,并且有很多奇怪的语言歧义。如果对象名称以数字开头,则很难区分实数和对象。
例如,如果没有带引号的标识符,这个简单的语句可能会变得一团糟:
select 1.1 + 2.2 from some_table;
Run Code Online (Sandbox Code Playgroud)
如果不限制对象名称,1.1 可能是一个巨大的数字,解析器必须查找名为“1”的对象,然后查找名为“1”的依赖对象,然后确定它是否优先于数字“1.1” 。
语言中可能存在奇怪的名称,但我认为 40 年前有人编写第一个 SQL 编译器时,他们决定不为了容纳一些奇怪的名称而让自己的生活变得如此复杂。
| 归档时间: |
|
| 查看次数: |
20008 次 |
| 最近记录: |