2013-02-11 46 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