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

Osy*_*Osy 5 oracle oracle11g

使用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 规则/原因,为什么你不能在没有引号的情况下创建它,即用户名以数字开头?

提前致谢

Jon*_*ler 4

带引号的标识符的问题

带引号的标识符可以成功地用于几乎所有 Oracle 对象,包括用户。理论上,它们在任何地方都可以工作。在实践中,您会遇到带引号的标识符带来的许多不便和问题。

来自SQL 语言参考:“注意:Oracle 不建议对数据库对象名称使用带引号的标识符。这些带引号的标识符被 SQL*Plus 接受,但在使用管理数据库对象的其他工具时它们可能无效。”

一旦使用双引号,对该对象的每个引用都必须使用双引号,并且大小写正确。您会发现不总是使用双引号的工具存在很多问题。以及查看元数据并且并不总是添加双引号的脚本的问题。引用的标识符只是自找麻烦。

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

这个问题很难回答,但我猜想限制对象使用的字符类型会使解析变得更容易。SQL 已经有很多关键字,并且有很多奇怪的语言歧义。如果对象名称以数字开头,则很难区分实数和对象。

例如,如果没有带引号的标识符,这个简单的语句可能会变得一团糟:

select 1.1 + 2.2 from some_table;
Run Code Online (Sandbox Code Playgroud)

如果不限制对象名称,1.1 可能是一个巨大的数字,解析器必须查找名为“1”的对象,然后查找名为“1”的依赖对象,然后确定它是否优先于数字“1.1” 。

语言中可能存在奇怪的名称,但我认为 40 年前有人编写第一个 SQL 编译器时,他们决定不为了容纳一些奇怪的名称而让自己的生活变得如此复杂。