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

Oracleにシーケンスを含む複数の行を挿入する

    マルチテーブル挿入の制限は次のとおりです。

    • 複数テーブルの挿入ステートメントのどの部分にもシーケンスを指定することはできません。マルチテーブル挿入は、単一のSQLステートメントと見なされます。したがって、NEXTVALへの最初の参照は次の番号を生成し、ステートメント内の後続のすべての参照は同じ番号を返します。

    これは完全に真実ではありません。シーケンスを使用できます。常に同じ値を取得するため、同じシーケンスを参照することで、親レコードと子レコードを一度に作成すると便利です。

    引き続きinsert allを使用する場合 あなたはできた シーケンス値を取得する非決定論的関数を使用して、これを回避します。

    CREATE FUNCTION get_seq RETURN NUMBER IS
    BEGIN
      RETURN postal_code_seq.nextval;
    END;
    /
    
    INSERT ALL
      INTO POSTAL_CODE( postal_code,description)
        VALUES(get_seq,'Coimbatore')
      INTO POSTAL_CODE (postal_code,description)
        VALUES(get_seq,'Mumbai') SELECT * FROM DUAL;
    
    2 rows inserted.
    
    SELECT * FROM postal_code;
    
                                POSTAL_CODE DESCRIPTION        
    --------------------------------------- --------------------
                                          1 Coimbatore          
                                          2 Mumbai              
    

    しかし、それは少し厄介です。おそらく、個々の挿入ステートメントを使用する方が良いでしょう-単一のテーブルに複数のテーブルを挿入することは、とにかく実際にはあまり得られません-シーケンスから一意の列を設定するトリガー、または値を生成するためのCTE/インラインビュー挿入します。



    1. PostgreSQL外部キーが存在しない、継承の問題?

    2. DEFERRABLE INITIALLY IMMEDIATEで定義された制約はまだ延期されていますか?

    3. LinuxのSQLServerAzure/2022データベース元帳テーブル。

    4. Oracle Javaの更新に早期にアクセスして、RIAをテストし、これらの更新が公開されたときにファイアドリルを回避するにはどうすればよいですか?