2013-03-24 48 views
0

這裏從數據庫中刪除該用戶的代碼:我如何通過用戶登錄名的功能,並在Oracle

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');

+0

爲什麼你想要一個功能來做到這一點,而不是使用'drop user'語句?是否會有很多不在示例代碼中的自定義邏輯?現在光標似乎沒有做任何事情。 – 2013-03-25 03:48:49

回答

0

只是一個猜測 - 有可能是更多的問題......

,但此行需要一個空間..

execute immediate 'drop' || USERNAME; 

應該

execute immediate 'drop ' || USERNAME; 
+0

我試過你的代碼,但現在它說我沒有特權,但我登錄爲系統 – 2013-03-24 22:56:00

+0

doh - 當然,因爲@DCookie表示 - 這也是一個DROP USER命令 - 你需要那個關鍵字 – Randy 2013-03-24 23:00:11

+0

我確實有關鍵字 – 2013-03-24 23:03:58

2

應該

EXECUTE IMMEDIATE 'drop user '||username; 

您可能還想要:

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

或者,如果用戶擁有任何對象,則不會被刪除。

另外,你是否以用戶系統登錄?

+0

是的我登錄作爲用戶系統,但它告訴我我沒有特權 – 2013-03-24 23:10:04

+0

你可以在程序外執行DROP命令嗎? – DCookie 2013-03-24 23:13:01

相關問題