Създайте потребител чрез процедура в друга база данни чрез връзка към база данни

Създадох потребител в друга база данни, използвайки връзка към базата данни и съхранена процедура, но се сблъсках с проблем, докато давам разрешение на новите създадени потребители.

Проверете кода по-долу:

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
:thanx за отговора ви..да, това бяха мои грешки в кодирането..забравих няколко интервала да добавя - person Rahul Joshi; 16.01.2015