【发布时间】:2017-05-10 12:45:44
【问题描述】:
在 Oracle PL/SQL 语言中,我想防止用户使用 delete * from table 除非指定主键。
我怎样才能做到这一点?
我刚刚发现了一个类似的问题,但语言不同:prevent delete * from table unless primary key specified
您能帮我找到一个Oracle PL/SQL 语言的解决方案吗?
编辑:
SELECT * FROM V$VERSION;
BANNER,CON_ID
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production,0
PL/SQL Release 12.1.0.2.0 - Production,0
CORE 12.1.0.2.0 Production,0
TNS for IBM/AIX RISC System/6000: Version 12.1.0.2.0 - Production,0
NLSRTL Version 12.1.0.2.0 - Production,0
【问题讨论】:
-
作为您链接的那个问题的给定解决方案(在 cmets 中),您必须在触发器中执行此操作。要使其可用于所有表,您必须创建一个函数来接收表名并查看字典以查看主键列并检查它们是否已填充。
-
你的表中主键的结构是什么?它只是和自增整数字段吗?
-
触发器必须是通用的,并且适用于任何表。
-
如何从一个部门删除所有员工(例如)?你不想限制
delete没有where子句,或者没有引用索引列的where子句吗? -
如果您想限制某人删除记录,您应该撤销该权限;然后,您可以在 PL/SQL 中创建一个 API,允许他们执行您希望允许的删除操作。