安全检查:如何限制Oracle Update / Delete查询中受影响的行数?

时间:2011-11-11 16:21:20

标签: sql oracle

我的应用程序中有一个类似微型ORM的组件,用于处理基本更新/删除操作的查询生成,但我需要在查询级别建立一些安全性,因为主键是自动确定的(第二级肛门,如果你愿意的话。

按照设计,每当我更新或删除一行时,它只会影响1行。

因此,给出以下查询:

UPDATE Cars SET Color = 'Red' WHERE CarID = 5

我如何告诉Oracle:“......此查询应该影响1行。如果它影响超过1行,则抛出一个毛茸茸的错误而不做任何事情。”

这样,假设有一天会出现一个错误并执行此查询:

UPDATE Cars SET Color = 'Red'

......反而会爆发。

2 个答案:

答案 0 :(得分:5)

您可能不希望ROLLBACK在那里,但如果出现问题,您通常想要回滚更新:

DECLARE
   update_exception EXCEPTION;
BEGIN
   UPDATE Cars 
      SET Color = 'Red' 
    WHERE CarID = 5;
   --
   IF SQL%ROWCOUNT > 1
   THEN
      RAISE update_exception;
   END IF;
EXCEPTION
   WHEN update_exception
   THEN
      ROLLBACK;
      -- Do your error handling...
END;

答案 1 :(得分:1)

使用SQL%ROWCOUNT确定提交事务之前受影响的记录数,并在以下情况下抛出异常> 1。