我使用数据库链接和存储过程在另一个数据库上创建了用户,但在为新创建的用户授予权限的同时面临问题。
检查以下代码:
CREATE OR replace PROCEDURE Hostname10 (user_name IN VARCHAR2,
pass_word IN VARCHAR2,
table_space IN VARCHAR2,
pro_file IN VARCHAR2)
AS
BEGIN
dbms_utility.Exec_ddl_statement@rahul2('CREATE USER '
||user_name
||' IDENTIFIED BY '
||pass_word
||' DEFAULT TABLESPACE '
||table_space
|| ' PROFILE '
|| pro_file
|| ' ACCOUNT UNLOCK');
dbms_utility.Exec_ddl_statement@rahul2('grant create table,create session,create view,create sequence,create procedure,create job,create synonym to'
||user_name
||'');
END;
/
我在执行时遇到错误:
Error:
Error report -
ORA-06550: line 1, column 7:
PLS-00201: identifier 'HOSTANAME10' must be declared
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
06550. 00000 - "line %s, column %s:\n%s"
*Cause: Usually a PL/SQL compilation error.
*Action:
答案 0 :(得分:1)
您的错误消息显示:
PLS-00201: identifier 'HOSTANAME10' must be declared
^
但您的程序创建为Hostname10
。所以这只是一个错字,当您尝试调用该过程时,名称中会有额外的a
。
你似乎在grant
电话中也有错误,尽管你现在还没有达到那么远;结束于:
... create synonym to'
||user_name
||'');
所以在生成的命令中,to
和用户名之间不会有空格;需要:
... create synonym to '
||user_name);
在用户名之后连接null / empty字符串并不做任何事情,所以我也可以自由删除它。