2014-07-15 90 views
0

我想删除用SQL脚本创建的用户,该脚本每次使用PowerShell脚本将参数传递给用户运行。例如:“ZKOracle01”,ZKOracle02等。删除用Oracle数据库中的脚本创建的用户(%)

我希望能在脚本的开头工作,以清理旧用户。

DROP USER LIKE ZKOracle%; 

我知道我可能只是这样做的开头或我的sql脚本的结束,

DROP USER ZKOracle01; 

,但我需要的用户留在DB至少6小时。

回答

0

你可以写一个位动态SQL

BEGIN 
    FOR u IN (SELECT * 
       FROM dba_users 
      WHERE username LIKE 'ZKOracle%') 
    LOOP 
    EXECUTE IMMEDIATE 'DROP USER ' || u.username; 
    END LOOP; 
END; 

的我可能会延长,要增加一点的日志记录,至少写出你正在下探用户名列表中,但应该做的你想要什么。请记住,DROP USER是DDL,因此它在语句前后隐式提交 - 您无法回滚您的更改。

为了展示这方面的工作的一个例子(我创建不区分大小写的用户)

SQL> ed 
Wrote file afiedt.buf 

    1 begin 
    2 for u in (select * from dba_users where username like 'ZKORACLE%') 
    3 loop 
    4  execute immediate 'drop user ' || u.username; 
    5  dbms_output.put_line('Dropped user ' || u.username); 
    6 end loop; 
    7* end; 
SQL>/
Dropped user ZKORACLE01 

PL/SQL procedure successfully completed. 
+0

,当我尝试运行此我得到这个错误。 “错误:ORA-06550:第6行,第48列: PLS-00103:在期待以下某项时遇到符号”文件结束“: 。(* @%&= - +; at是mod余数不是rem 返回<指数(**)><>或!=或〜=> = <= <> 和或类似like2 like4 likec之间使用||批量 成员submultiset“ – user3826435

+0

@ user3826435 - 在我的脚本,第6行是'EXECUTE IMMEDIATE'。脚本中的第6行是什么?你的脚本中是否有EOF字符? –

+0

是的,第6行是我的脚本的EXECUTE IMMEDIATE。通过EOF字符,你的意思是分号? – user3826435

相关问题