我在我的应用程序中有一个微型ORM组件,处理基本更新/删除操作的查询生成,但我需要在查询级别建立一些安全性,因为主键是自动确定的(如果你愿意的话,第二级肛门).
按照设计,每当我更新或删除一行时,它应仅影响1行.
因此,给出以下查询:
UPDATE Cars SET Color = 'Red' WHERE CarID = 5
我怎么能告诉Oracle:"......这个查询应该影响1行.如果它影响超过1行,抛出一个大毛茸茸的错误而不做任何事情." ?
这样,假设某天有一个错误并执行此查询:
UPDATE Cars SET Color = 'Red'
......它会爆炸而不是.
您可能不希望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)