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