sql >> データベース >  >> RDS >> Oracle

自動コミットをオンにしてOracleテーブルを作成します

    自律トランザクションを使用して可能です。

    CREATE TABLE t1 (x INTEGER PRIMARY KEY);
    CREATE TABLE t2 (x INTEGER);
    CREATE TABLE t3 (x INTEGER);
    CREATE TABLE t4 (x INTEGER REFERENCES t1(x));
    

    次に、この匿名のPL/SQLを実行します。ローカルプロシージャupd_table_3を注意深く見てください。 宣言されたときに実行されません。メインのBEGIN内で呼び出されたときに実行されます ブロック:

    DECLARE 
      PROCEDURE upd_table_3 IS
      PRAGMA AUTONOMOUS_TRANSACTION;
      BEGIN
        INSERT INTO t3 VALUES (3);
        COMMIT;
      END;
    BEGIN
      INSERT INTO t1 VALUES (1);
      INSERT INTO t2 VALUES (2);
      upd_table_3;
      INSERT INTO t4 VALUES (4);
      COMMIT;
    END;
    /
    

    この手順は、ORA-02291を使用した4番目の挿入で意図的に失敗するはずです。 。私はこのようにそれを作りました。次に

    ROLLBACK;
    

    t3を除くすべてのテーブルをロールバックする必要があります 、自律トランザクションで挿入を行いました。

    SELECT * FROM t1;
    
    no rows selected
    
    SELECT * FROM t2;
    
    no rows selected
    
    SELECT * FROM t3;
    
             X
    ----------
             3
    
    SELECT * FROM t4;
    
    no rows selected
    


    1. パーティション内の連続した番号の最大のグループを見つける

    2. Django:NotImplementedError:annotate()+distinct(fields)は実装されていません

    3. ページあたりの最大SQLクエリ

    4. 2つの自動インクリメント列または他の列の自動インクリメントと同じ値