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