ACCEPT p_username PROMPT 'Enter Username : '
ACCEPT p_password PROMPT 'Enter New Password for Username : '
VARIABLE g_output VARCHAR2(4000)
DECLARE
CURSOR NAME IS SELECT TABLE_NAME FROM DBA_TABLES
WHERE OWNER LIKE '%&p_username%';
DDL_DROP VARCHAR2(200);
BEGIN
FOR TNAME IN NAME
LOOP
BEGIN
EXECUTE IMMEDIATE 'DROP TABLE' || ' ' || TNAME.TABLE_NAME;
:g_output := :g_output || ' ' || TNAME.TABLE_NAME;
END;
END LOOP;
END;
/
PRINT g_output
你好,我是PL/SQL的新手,試圖創建一個腳本來刪除用戶的表並最終在刪除表後更改其密碼。我對EXECUTE IMMEDIATE命令有困難。如果我刪除EXECUTE IMMEDIATE行,該腳本將起作用。我通過在循環中打印表名來測試它,並獲得正確的表格及其相應的名稱。PL/SQL DDL執行立即執行
任何幫助表示讚賞,謝謝。
編輯代碼,以反映建議,但仍然沒有奏效。獲取相同的錯誤。
ACCEPT p_username PROMPT 'Enter Username : '
ACCEPT p_password PROMPT 'Enter New Password for Username : '
VARIABLE g_output VARCHAR2(4000)
DECLARE
NAME SYS_REFCURSOR;
DDL_WORD VARCHAR2(200);
BEGIN
OPEN NAME FOR SELECT TABLE_NAME FROM DBA_TABLES
WHERE OWNER LIKE '%&p_username%';
LOOP
FETCH NAME INTO DDL_WORD;
EXIT WHEN NAME%NOTFOUND;
EXECUTE IMMEDIATE 'DROP TABLE "' || DDL_WORD || '" CASCADE CONSTRAINTS';
:g_output := :g_output || ' ' || DDL_WORD;
END LOOP;
CLOSE NAME;
END;
/
PRINT g_output
數據字典中的所有內容都是大寫的。您將需要擁有'%'||之類的所有者上(p_username)|| '%''。你真的有每個用戶一張桌子嗎? – Ben 2012-02-18 09:06:37
我輸入的用戶名有14個表。我自己創建了它們,表格中有數據。 – ReiRei 2012-02-18 17:06:43