【发布时间】:2016-04-06 01:12:13
【问题描述】:
我正在创建一个使用 Servlet 和 JDBC 来创建用户的简单应用程序。
有什么方法可以在创建 Oracle 用户时使用触发器将用户名插入另一个表:
create user xyz ......
一旦此查询成功执行,它会将用户信息插入DBA_USERS 表中。
我希望用户名也插入到另一个表中。我应该通过 JDBC 手动将它添加到另一个表中,还是可以创建一个触发器来自动执行它?
【问题讨论】:
我正在创建一个使用 Servlet 和 JDBC 来创建用户的简单应用程序。
有什么方法可以在创建 Oracle 用户时使用触发器将用户名插入另一个表:
create user xyz ......
一旦此查询成功执行,它会将用户信息插入DBA_USERS 表中。
我希望用户名也插入到另一个表中。我应该通过 JDBC 手动将它添加到另一个表中,还是可以创建一个触发器来自动执行它?
【问题讨论】:
您可以基于create user DDL 使用a system trigger(但不是dba_users 视图上的 DML 触发器 - 无论如何您都不能这样做,但不要想关于尝试根据数据字典做任何事情)。但是您实际上无法知道所创建的用户是否实际上是应用程序用户 - 您会假设添加到数据库中的任何用户仅与您的应用程序相关。
由于您无论如何都必须采取其他步骤 - 例如授予角色和/或权限,可能添加其他应用程序安全数据等,因此手动插入表可能更有意义。
将所有用户创建代码放入一个存储的(可能是打包的)过程中,然后通过 JDBC 调用它可能更有意义;这样做的缺点是create user 和任何其他 DDL 都需要从过程中作为动态 SQL 执行。但是,您自己的任何表插入都将放在一起,并且您只需进行一次 JDBC 调用即可。
您还可以有其他程序来修改和删除用户。
要记住的一点是,无论你怎么做,DDL 都会隐式提交。不一定是问题,只是需要注意的事情,因此您可以以可恢复的方式对步骤进行排序。
【讨论】: