Создать пользователя через процедуру в другой базе данных через ссылку на базу данных

Я создал пользователя в другой базе данных, используя ссылку на базу данных и хранимую процедуру, но столкнулся с проблемой при предоставлении разрешения новым созданным пользователям.

Проверьте код ниже:

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:

person Rahul Joshi    schedule 16.01.2015    source источник
comment
код работает с анонимным блоком, но не работает в процедуре   -  person Rahul Joshi    schedule 16.01.2015
comment
Ошибка не говорит о том, что процедура не работает; он говорит, что вы неправильно вызываете процедуру.   -  person Alex Poole    schedule 16.01.2015


Ответы (1)


Ваше сообщение об ошибке говорит:

PLS-00201: identifier 'HOSTANAME10' must be declared
                           ^

Но ваша процедура создана как Hostname10. Так что это просто опечатка, у вас лишняя a в имени при попытке вызвать процедуру.

У вас также, кажется, есть ошибка в вызове grant, хотя в настоящее время вы не зашли так далеко; что заканчивается:

... create synonym  to'
                                   ||user_name
                                   ||'');

поэтому в сгенерированной команде не будет пробела между to и именем пользователя; это должно быть:

... create synonym  to '
                                   ||user_name);

Объединение нулевой/пустой строки после имени пользователя ничего не делает, поэтому я взял на себя смелость удалить и это.

person Alex Poole    schedule 16.01.2015
comment
@RahulJoshi - что ты имеешь в виду? Вы пытались выполнить его как Hostname10 вместо Hostaname10, и это все равно не сработало? Или вы только добавили пробел внутри процедуры, но все равно назвали ее неправильным именем? - person Alex Poole; 16.01.2015
comment
я добавил пространство и попытался выполнить его как Hostname10 вместо Hostaname10 в обоих сценариях результат одинаков. Отчет об ошибке - ORA-06550: строка 1, столбец 7: PLS-00201: идентификатор 'HOSTANAME10' должен быть объявлен ORA-06550: строка 1, столбец 7: PL/SQL: Оператор игнорируется 06550. 00000 - строка %s, столбец %s:\n%s *Причина: Обычно ошибка компиляции PL/SQL. *Действие: - person Rahul Joshi; 16.01.2015
comment
@RahulJoshi - ошибка по-прежнему говорит HOSTANAME10, поэтому вы не изменили способ ее вызова. Это может помочь, если вы добавите свой звонок к вопросу; возможно, у вас более одного звонка в анонимном блоке, и вы исправили только один. В противном случае вы, кажется, не работаете, как вы думаете. - person Alex Poole; 16.01.2015
comment
:спасибо за ответ..да, это были мои ошибки в кодировании..я забыл добавить пробелы - person Rahul Joshi; 16.01.2015