您可以创建一个名为DUALtable的表,因为表和公共同义词具有不同的命名空间.有关详细信息,请参阅Oracle SQL语言参考的数据库对象名称和限定符一章.
编辑:说明机制:
如果您DUAL以scott用户身份创建自己的表
CREATE TABLE dual (x VARCHAR2(1));
Run Code Online (Sandbox Code Playgroud)
...然后它出现在数据字典中:
SELECT object_id, object_type, owner, object_name, namespace
FROM dba_objects
WHERE object_name='DUAL';
OBJECT_ID OBJECT_TYPE OWNER OBJECT_NAME NAMESPACE
142 TABLE SYS DUAL 1
143 SYNONYM PUBLIC DUAL 1
78138 TABLE SCOTT DUAL 1
Run Code Online (Sandbox Code Playgroud)
因此,每个所有者和名称空间的名称都是唯一的.您无法在架构中添加另一个名为DUAL的表.您无法创建名为DUAL的私有同义词,但您可以为其他对象中的模式创建自己的同义词.
请务必再次放下桌子.即使是简单的陈述也不再适用:
SELECT sysdate FROM DUAL;
--
DROP TABLE dual;
SELECT sysdate FROM DUAL;
01.07.2018
Run Code Online (Sandbox Code Playgroud)