Oracle并引用ALL_USERS(USERNAME)

Ift*_*lad 2 oracle foreign-keys ora-01031

所以我需要从Employee表(idEmployee,name等)到创建帐户的真实用户进行映射.我决定添加一个表Mapping_Employee_User(idEmployee,userName),如下所示

CREATE TABLE Mapping_Employee_User( 
    idEmployee NUMBER(6)
        CONSTRAINT FK_Mapping_Employee_User1 REFERENCES Employee (idEmployee),
    userName VARCHAR2(30 BYTE)
        CONSTRAINT FK_Mapping_Employee_User2 REFERENCES ALL_USERS(USERNAME),
    CONSTRAINT PK_Mapping_Employee_User PRIMARY KEY (idEmployee, userName)
);
Run Code Online (Sandbox Code Playgroud)

但我得到" ORA01031权限不足原因:试图更改当前的用户名或密码..."但我实际上并没有这样做,我只是想做一个参考.

注意:我对此用户拥有完整的权利

记录为SYS我可以看到实际的表名为"USER $",我找不到表ALL_USERS ...无论如何我怎么做这种引用?

der*_*ert 5

ALL_USERS并且USER$都是系统表/视图.它们由Oracle本身维持在低水平.在太低的水平上不能执行这些约束.你根本无法做你想做的事.

(按照这种方式思考:如果您尝试过会发生DROP USER bob什么?您是否希望Oracle强制执行您的外键约束?如果您的用户表空间处于脱机状态会怎样?)

编辑:我建议你不要在userName上留下外键.您可能要安排一些工作给用户比较Mapping_Employee_User对比DBA_USERS,以确保它们保持同步.或者,您可能希望使用LDAP(我听说可能)来管理您的Oracle用户.