2013-02-11 76 views
-4

我试图创建一个程序,将删除某个用户的系统权限。当我编译我的代码,我得到“编译错误”SQL过程删除系统权限

create or replace procedure deactivate_user 
(
p_username in varchar2 
) 
as 
l_username varchar2(30):=upper(p_username); 
cnmd varchar2(50); 
begin 
    for rec (select privilege, admin_option from dba_sys_privs 
      where grantee = l_username) loop 
      cnmd := 'REVOKE '||rec.privilege||' from '||l_username; 
execute immediate cnmd; 
end loop; 
end; 
/
+1

您正在使用什么数据库管理系统? – PinnyM 2013-02-11 20:46:57

+0

它看起来像我对Oracle PL/SQL – 2013-02-11 20:47:13

+1

错误说什么? – SLaks 2013-02-11 20:57:47

回答

1

您在FOR语句中缺少IN;它应该是:

FOR rec IN (SELECT privilege, admin_option FROM dba_sys_privs 
      WHERE grantee = l_username) LOOP 

http://docs.oracle.com/cd/E11882_01/appdev.112/e17126/static.htm#CIHCGJAD

+0

谢谢。这让它来创建过程,但当我“exec deactivated_user”我得到一个错误SQL> exec deactivate_user; BEGIN deactivate_user;结束; * ERROR位于第1行: ORA-06550:第1行,第7列: PLS-00306:错误数量或类型的在调用 'DEACTIVATE_USER' ORA-06550参数:第1行,第7列: PL/SQL:语句被忽略 – user2062656 2013-02-11 21:05:10

+1

@ user2062656 - 你的过程有一个'p_username'参数,但是你没有在你的调用中提供一个参数。它应该是'exec deactivate_user('USERNAME')'。 – 2013-02-11 21:48:50