通过数据库链接在另一个数据库上创建用户

时间:2015-01-16 09:32:19

标签: oracle stored-procedures permissions grant database-link

我使用数据库链接和存储过程在另一个数据库上创建了用户,但在为新创建的用户授予权限的同时面临问题。

检查以下代码:

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:

1 个答案:

答案 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字符串并不做任何事情,所以我也可以自由删除它。