2012-04-26 2 views
2

Я попробовал что-то вроде этого, чтобы удалить пользователя из Oracle DB.Oracle Stored Procedure Drop User

create or replace procedure skeleton1(inUser varchar) IS 
begin 
    set @str = concat('drop user ', "'",inUser,"'@","'localhost'"); 
    prepare stmt from @str; 
    -- select @str; 
    execute IMMEDIATE stmt; 
    deallocate prepare stmt; 
end// 
delimiter ; 

Но я столкнулся с несколькими ошибками компиляции.

Может ли кто-нибудь помочь?

ответ

4

Немного того, что у вас есть, является синтаксисом Oracle. Я предлагаю вам начать чтение документации PL/SQL, прежде чем пытаться сделать что-то потенциально разрушительное. Возможно, начните here и посмотрите, куда он вас доставит.

Я немного неохотно даю прямой ответ, но вы получите его откуда-то; так что вы можете сделать что-то вроде:

create or replace procedure skeleton1(inUser varchar) IS 
begin 
    execute IMMEDIATE 'drop user ' || inUser); 
end; 
/

Но вы должны дезинфицировать свои входы, чтобы действительно убедиться, что он не может злоупотреблять, и вы действительно должны понимать, что вы делаете, и какое влияние это может иметь. Как один пример, это не удастся, если пользователь владеет любыми объектами.

+0

+1 для "* начать чтение документации PL/SQL *" –

+0

Спасибо, ваш отзыв был действительно полезен. –

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