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

シーケンスを使用して2つのOracleテーブルに挿入する

    すべて挿入 マルチテーブルインサート このための構文:

    insert all
    into job (jobid, fileid, jobname)
    values (jobidsequence.nextval, fileid, jobname)
    into reference (jobid, reffileid)
    values (jobidsequence.nextval, reffileid)
    select  4660 as fileid, 'name' as jobname, 4391 as reffileid
    from dual;
    
    2 rows inserted.
    
    select * from job;
    
         JOBID     FILEID JOBNAME  
    ---------- ---------- ----------
            42       4660 name       
    
    select * from reference;
    
         JOBID  REFFILEID
    ---------- ----------
            42       4391 
    

    SQLフィドル

    制限から:

    明らかに、 valuesでシーケンスを使用しています 節なので、最初の文は正確ではないようです。ただし、 selectでは使用できません 部。 ( values で使用できるかどうかは100%わかりません。 すべてのバージョンで使用できますが、ドキュメントはいずれにせよ少し誤解を招きやすく、矛盾しています。

    したがって、これは単一のステートメントであるため、 nextvalへの2つの参照であるという事実を利用しています。 3番目の文にあるように、同じ番号を取得するため、両方のテーブルで同じシーケンス値が使用されます。



    1. WordPressサイトの移行-アイコンがありません

    2. 外部キーと主キーのPostgresとインデックス

    3. MySQL-複数列のインデックス

    4. 永続化を可能にするために、Websphere MQメッセージはどのように保管されますか?