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

Bra*_*don 2 sql oracle

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

按照设计,每当我更新或删除一行时,它应仅影响1行.

因此,给出以下查询:

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

我怎么能告诉Oracle:"......这个查询应该影响1行.如果它影响超过1行,抛出一个大毛茸茸的错误而不做任何事情." ?

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

UPDATE Cars SET Color = 'Red'

......它会爆炸而不是.

Oll*_*lie 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;
Run Code Online (Sandbox Code Playgroud)