Как отбросить пользователей по маске в СУБД Oracle - PullRequest
3 голосов
/ 17 декабря 2010

Я хочу удалить всех пользователей, у которых в начале имени указано «WIN» (например, «WIN $ DOWS»).Можно ли написать что-то вроде следующего:

drop user where name like 'WIN%'

Ответы [ 3 ]

6 голосов
/ 17 декабря 2010

Оператор DROP USER не поддерживает предложение WHERE, а тем более LIKE и подстановочные знаки.

Вам нужно получить список пользователей из DBA_USERS , которые совпадают, и выполнить итерацию по этому списку:

--Bye Users!
FOR i IN (SELECT t.username
            FROM DBA_USERS t
           WHERE t.username LIKE 'WIN%') LOOP
  EXECUTE IMMEDIATE 'drop user '|| i.username ||'';
END LOOP;
1 голос
/ 28 января 2015

В случае каскада удалить

BEGIN
  FOR i IN (
    SELECT t.username
    FROM DBA_USERS t
    WHERE t.username LIKE 'WIN%') 
  LOOP
    EXECUTE IMMEDIATE 'DROP USER '|| i.username || ' CASCADE';
  END LOOP;
 EXCEPTION WHEN OTHERS THEN
   dbms_output.put_line(sqlerrm);
END;
/
1 голос
/ 13 августа 2014

У меня была ошибка с решением выше без синтаксиса BEGIN .. EXCEPTION .. END. Это работает для меня:

BEGIN
  FOR i IN (
    SELECT t.username
    FROM DBA_USERS t
    WHERE t.username LIKE 'WIN%') 
  LOOP
    EXECUTE IMMEDIATE 'DROP USER '|| i.username;
  END LOOP;
 EXCEPTION WHEN OTHERS THEN
   dbms_output.put_line(sqlerrm);
END;
/

Для каскадного удаления добавьте || ' CASCADE' после i.username.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...