如何将用户登录名传递给函数并从oracle中的数据库中删除该用户

时间:2013-03-24 22:45:07

标签: sql oracle oracle10g oracle11g

以下是代码:

  create or replace procedure getuser(User_ID In VARCHAR2)Is    
    Username varchar2(30);
    cursor c1(Userid VARCHAR2)  --Cursor o store the row
    IS SELECT USERNAME FROM ALL_USERS WHERE USERNAME = Userid;
    BEGIN
     Open c1(User_id);
     loop
          FETCH c1 INTO USERNAME;
          EXIT WHEN C1%NOTFOUND;
       END LOOP;
       execute immediate 'drop' || USERNAME; 
       CLOSE c1;
    END;
    / 

    execute system.getuser('STUDENT_0602053');

执行存储过程时,获取的错误是无效的sql语句 执行system.getuser('STUDENT_0602053');

2 个答案:

答案 0 :(得分:2)

应该是

EXECUTE IMMEDIATE 'drop user '||username;

您可能还需要:

EXECUTE IMMEDIATE 'drop user '||username||' cascade';

或者,如果用户拥有任何对象,则不会被删除。

另外,您是以用户SYSTEM身份登录的吗?

答案 1 :(得分:0)

只是一个猜测 - 可能会有更多问题......

但这条线需要一个空间..

execute immediate 'drop' || USERNAME;

应该是

execute immediate 'drop ' || USERNAME;