プロが教えるわが家の防犯対策術!

初歩的質問で申し訳ないのですがご教授下さい。

※1のような、複数行のSQL文を一括実行し、全てのレコードがエラー発生無い場合のみコミット処理をして、
1行でもエラーがある場合全てをロールバックしたいのですが。
どのようにすれば良いのでしょうか。。

■DB Oracle9i Enterprise Edition Release 9.2.0.1.0

※1
INSERT INTO TT_売上明細( 売上番号, 明細番号, 商品コード, 売上数量) VALUES( 6, 4, 1, 1);
INSERT INTO TT_売上明細( 売上番号, 明細番号, 商品コード, 売上数量) VALUES( 7, 4, 2, 2);
INSERT INTO TT_売上明細( 売上番号, 明細番号, 商品コード, 売上数量) VALUES( 8, 4, 3, 3);

A 回答 (2件)

INSERT INTO TT_売上明細( 売上番号, 明細番号, 商品コード, 売上数量)


SELECT 6 売上番号, 4 明細番号, 1 商品コード, 1 売上数量 FROM DUAL
UNION ALL
SELECT 7, 4, 2, 2 FROM DUAL
UNION ALL
SELECT 8, 4, 3, 3 FROM DUAL;

でエラーだったらROLLBACK、正常終了だったらCOMMIT。
    • good
    • 0

※ PL/SQL 文と仮定して回答します。



BEGIN

    INSERT INTO TT_売上明細( 売上番号, 明細番号, 商品コード, 売上数量) VALUES( 6, 4, 1, 1);
    INSERT INTO TT_売上明細( 売上番号, 明細番号, 商品コード, 売上数量) VALUES( 7, 4, 2, 2);
    INSERT INTO TT_売上明細( 売上番号, 明細番号, 商品コード, 売上数量) VALUES( 8, 4, 3, 3);

    COMMIT;

EXCEPTION
    WHEN OTHERS THEN
        ROLLBACK;
END;

こういう事じゃなくて?。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す