2014-02-12 2 views
1
DECLARE 

BEGIN 
    FOR s IN (SELECT first_name 
        FROM EA_marketing_table 
       WHERE town = 'LONDON' 
      ) 
    LOOP 
      EXECUTE IMMEDIATE 'CREATE USER ' ||(s.first_name)|| ' IDENTIFIED BY LOL'; 
      dbms_output.put_line (s.first_name || ' IDENTIFIED BY LOL'); 
    END LOOP; 

END; 
/

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

Это новый код

CREATE OR REPLACE PROCEDURE proc_it_development AS 
first_name VARCHAR2 (25); 

BEGIN 
    FOR r IN (SELECT first_name 
       FROM EA_marketing_table 
       WHERE town = 'lONDON ') 
    LOOP 
     EXECUTE IMMEDIATE 'CREATE USER '||(r.first_name)|| ' IDENTIFIED BY POOP '; 

    END LOOP; 

    EXCEPTION 
    WHEN NO_DATA_FOUND THEN dbms_output.put_line ('r SELECT...INTO did not return any row.'); 

END; 
/

любая помощь, пожалуйста?

:)

+1

Добро пожаловать в StackOverflow: если вы отправляете код, XML или образцы данных, ** пожалуйста ** выделите эти строки в текстовом редакторе и нажмите кнопку «образцы кода» ('{}') на панели инструментов редактора, чтобы приятно формат и синтаксис выделить его! –

+0

Пароли чувствительны к регистру по умолчанию от 11 г, поэтому убедитесь, что вы используете именно правильное значение. Но какой пароль вы используете - один из анонимного блока или один из процедуры? Вы бросили пользователей между ними? (Я собирался спросить, есть ли у вас «serveroutput», когда вы выполняете процедуру, поэтому любые ошибки будут отображаться, но вы не сможете получить «no_data_found» в любом случае, и все остальное (например, уже существующий пользователь) приведет к прерыванию proc). Какая ошибка возникает при попытке войти в систему - ORA-01017, ORA-01045, что-то еще? –

+1

(1) Ваш новый код просто создает процедуру, но на самом деле он не запускает * его. Вам нужно запустить его, например. с 'exec proc_it_development;'. (2) у вас есть обработчик исключений для NO_DATA_FOUND, но ваша процедура никогда не вызовет этого исключения. (3) Убедитесь, что вы проверяете, что есть некоторые строки, возвращаемые запросом - т. Е. Город действительно написал 'lONDON'? По умолчанию сравнение строк зависит от регистра. –

ответ

0

Roles are not enabled in procedures/packages так что вам нужно, чтобы получить привилегию своего пользователя напрямую. Скорее всего, вы подключаетесь через пользователя, которому была предоставлена ​​привилегия CREATE USER через роль (например: роль DBA?)

Чтобы посмотреть, что вы можете сделать в процедуре, вы можете отключить активные роли для текущего сеанса :

set role none 

затем попробуйте ваш первый блок кода. Если он работает, он также будет работать в процедуре.

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

GRANT CREATE USER TO <your_schema>; 
+0

привет, я пробовал это сделать, но он не подошел, – user3302508

+1

Какое сообщение об ошибке вы получаете? «Не работает» очень мало в точности :) –

+0

привет! он не дает никакого сообщения об ошибке, он говорит, что «процедура успешно завершена», но всякий раз, когда мы пытаемся войти в систему с именем пользователя и паролем, это не позволяет нам это делать. – user3302508

0

Вы должны приложить пароль в двойных кавычках, в Oracle 11 Пароли чувствительны к регистру по умолчанию , Тогда вы создаете только пользователя без каких-либо привилегий, т. Е. CREATE SESSION. Привилегия отсутствует.

+0

Вам не нужно включать пароль в двойные кавычки.Согласитесь с сеансом, хотя (это ссылка ORA-01405 в моем комментарии * 8-), но пользователь, созданный в анонимном блоке, тоже не должен работать. Различие между процедурами и блоками кажется красной селедкой. Мне все равно нравится, когда OP фактически скажет, какую ошибку они получают при регистрации, хотя ... –

+0

Сделал обновление в своем ответе. –

+0

Вам также не нужно включать пароли с учетом регистра в двойные кавычки. (Просто дважды проверяется в 11gR2, если я теряю сюжет. Двойные кавычки разрешены, но не имеют значения. Это не идентификатор * 8-). –

Смежные вопросы