2011-11-11 9 views
2

基本的な更新/削除操作のクエリ生成を処理する、アプリケーションに小型のORMのようなコンポーネントがありますが、主キーが自動的に決定されるため、クエリレベルでいくつかの安全性を構築する必要がありますあなたはするであろう)。安全性チェック:Oracle Update/Deleteクエリで影響を受ける行の数を制限する方法は?

行を更新または削除するたびに、1行のみに影響するはずです。だから、

、次のクエリを与えられた:

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

がどのようにOracleを伝えることができます:」...このクエリが1行に影響を与える必要があり、それがどの超える1行に影響する場合は、大きなを投げます。毛むくじゃらのエラーと何もしないでください。

UPDATE Cars SET Color = 'Red'

...それだけではなく、爆破されます:

そうすれば、いつかそこにバグがあると、このクエリが実行されているとします。

答えて

5

場合には:

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

使用SQL%ROWCOUNTトランザクションをコミットする前に、影響を受けたレコードの数を決定し、例外をスローするようにあなたは、通常のアップデートをロールバックしたい問題がある場合は、そこにROLLBACKをしたいが、ないかもしれません> 1.

+0

サンプルクエリがありますか? – Brandon

+1

@routeNpingme、リンクに従ってください:) –

関連する問題