通过一个错误的脚本,我在Oracle 9i系统上创建了一个用户名围绕用户名(即他的用户名是'用户名',而不是用户名)的用户。现在我想删除该用户。既不是“DROP USER'用户名'”也不是“DROP USER \'username \'”,也不是“DROP USER(SELECT username from all_users where user_id = 123)”。我该如何摆脱那个用户?
答案 0 :(得分:4)
create user "'bla'" identified by bla;
drop user "'bla'";
答案 1 :(得分:2)
根据Oracle's Documentation ...
“引用的标识符开始和结束 用双引号(“)。如果 使用a命名模式对象 引用标识符,然后你必须使用 每当双引号 你指的是那个对象。“
所以这......
DROP USER "username" CASCADE;
答案 2 :(得分:2)
我知道这是一篇旧帖子,但是对于因此问题搜索而遇到困扰的任何人 - 问题似乎是数据库触发器在drop用户上触发。 我发布了我为Oracle XE找到的解决方案(对于其他10g版本可能也是如此) here
希望有人觉得这很有用,
麦克
答案 3 :(得分:1)
尝试DROP USER "'username'"
或DROP USER ''username''
。 (注意那些最后的引号都是单引号)
答案 4 :(得分:0)
我不知道甲骨文,但你可以尝试用双引号括起来吗?
(如果错误,我会删除这个答案)
答案 5 :(得分:0)
以下代码可能会对您有所帮助:
declare
sel_username varchar2(30);
r_user_id varchar2(30);
r_username varchar2(30);
user_cmd varchar2(200);
BEGIN
/*
This procedure will delete a single user_id and can be used to delete a user
with none displayable characters in the name
**Replace** the user_id in this script to that you want to delete !!
Author: Ulrich Henkenjohann - March 2010 / tested on ORACLE 10.2.0.4
*/
-- select the username for a special user_id. Ther username may contain none displayed characters
select username into sel_username from dba_users where user_id = 34;
select user_id, username into r_user_id , r_username from dba_users where username = sel_username ;
DBMS_OUTPUT.PUT_LINE('Selected user: ' || r_user_id || ' ' || r_username);
-- If a test is needed, an alter passwort command may be usefull
-- user_cmd := 'ALTER USER "' || r_username || '" IDENTIFIED BY PASSWORDX ';
-- Drop the selected user
user_cmd := 'DROP USER "' || r_username || '" CASCADE ';
DBMS_OUTPUT.PUT_LINE('Executing user_cmd: ' || user_cmd );
execute immediate user_cmd ;
END;
/
答案 6 :(得分:0)
再次提供更好的格式:
declare
sel_username varchar2(30);
r_user_id varchar2(30);
r_username varchar2(30);
user_cmd varchar2(200);
BEGIN
/*
This procedure will delete a single userid and can be used to delete a user
with none displayable characters in the name
**Replace the user_id in this script !!**
Author: Ulrich Henkenjohann - March 2010 / tested on ORACLE 10.2.0.4
*/
-- select the username for a special user_id. Ther username may contain none displayed characters
select username into sel_username from dba_users where user_id = 34;
select user_id, username into r_user_id , r_username from dba_users where username = sel_username ;
DBMS_OUTPUT.PUT_LINE('Selected user: ' || r_user_id || ' ' || r_username);
-- If a test is needed, an alter passwort command may be usefull
-- user_cmd := 'ALTER USER "' || r_username || '" IDENTIFIED BY PASSWORDX ';
-- Drop the selected user
user_cmd := 'DROP USER "' || r_username || '" CASCADE ';
DBMS_OUTPUT.PUT_LINE('Executing user_cmd: ' || user_cmd );
execute immediate user_cmd ;
END;
/