Oracle PL / SQL:除非指定了主键,否则禁止从表中删除*

时间:2017-05-10 12:45:44

标签: oracle plsql triggers

在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

2 个答案:

答案 0 :(得分:2)

正如在引用的线程中观察到的那样,此要求相当于我想减慢在我的数据库中执行的每个删除。更不用说有时需要批量删除。

这是尝试将技术修复应用于政治情况,流程失败的典型示例。我曾经认识一位开发人员,他开始删除大量(数百万行)表,因为他们不知道如何在PL / SQL中调换变量。但是,由于一个人的愚蠢错误,惩罚整个开发团队是错误的。

正确的解决方案是实施其中一项或两项:

  • 确保您的开发人员(或具有原始SQL访问权限的任何用户)了解如何编写正确的SQL
  • 从不能信任他们的人那里取消DELETE权限
  • 有适当的备份,所以有人删除所有记录并不重要

答案 1 :(得分:1)

不确定,但如果违反约束,删除将失败,因此我要查看是否可以创建将被违反的约束(例如,存在必须首先删除子记录的外键约束)。