【发布时间】:2021-01-01 11:29:27
【问题描述】:
我的数据库是 XE 18。我的用户有创建用户,我可以在 SQL Plus 中创建一个用户,使用这个:
ALTER SESSION SET "_ORACLE_SCRIPT" = true;
CREATE USER auxiliar IDENTIFIED BY auxiliar2020 ;
然后我创建一个包,其中包含一个应该动态创建用户的功能,上面的行是:
EXECUTE IMMEDIATE 'alter session set "_ORACLE_SCRIPT"=true';
vSql := 'CREATE USER :1 IDENTIFIED BY ":2" ' ;
EXECUTE IMMEDIATE vSql USING vNome_Usuario,vSenha_Usuario;
我收到此错误:
错误的关系 -
ORA-65096: nome de atribuição ou de usuário comum inválido
ORA-06512: em "TOKEN.PRC_CRIA_USUARIO",第 3 行
ORA-06512: 第 3 行
65096. 00000 - “无效的普通用户或角色名称”
*原因:尝试使用对普通用户或角色无效的名称创建普通用户或角色。除了用户名和角色名的常规规则外,普通用户名和角色名只能由 ASCII 字符组成,并且必须包含 common_user_prefix 参数中指定的前缀。
*操作:指定一个有效的普通用户或角色名称。
【问题讨论】:
-
显然您在容器数据库中执行了代码,使用了无效的用户名。确保您在正确的数据库中执行代码(应用程序代码应始终位于可插入数据库中,而不是容器中),并且您遵循创建用户的数据库的规则。默认情况下,在容器数据库中创建的用户(即普通用户)的名称必须以“C##”前缀开头。
-
“创建用户”不仅仅适用于立即执行,如果我把它放在 sql 上加上我可以在没有 C## 的情况下创建用户:alter session set "_ORACLE_SCRIPT"=true; / CREATE USER usuariostackoverflow IDENTIFIED BY auxiliar2020 ; /
标签: oracle plsql ddl oracle18c execute-immediate