2017-07-02 10 views
1

INSERT文でRETURNINGを使用していますが、INSERT文(またはトランザクションを囲む)の結果として戻す方法が必要です。 SELECTを使用します。これを行う方法はありますか? DBMS_OUTPUTは使用できません。ありがとう!OracleのINSERTの後の最後のIDを選択してください

答えて

2

RETURNING句は、のINSERT文で生成されたIDの値を取得する最も簡単な方法です。 max(id)の照会は、特にRACを使用している場合は、マルチユーザー環境では信頼性がありません。

IDを使用すると、INSERTと同じセッションにこのを実行することにより、シーケンスの現在の値を取得することができますシーケンスから移入された場合:

select your_sequence.currval from dual; 

これは、あなたがの名前を知っておく必要があることを意味あなたが12cアイデンティティ列を使用している場合は、シーケンスは常に明白ではありません。

基本的に、IDにRETURNINGを使用する場合は、

+0

ありがとう、ここではダム質問...私はどのようにシーケンスを認識するのですか? – joelc

+0

それはビジネスロジックです。 Oracle 12c Identity列を使用していない限り、シーケンスとプライマリ・キーの間にデータ・ディクショナリはありません。 PL/SQL API、トリガなど、アプリケーションのロジックを確認する必要があります。[この回答はあなたに出発点を与えるかもしれません](https://stackoverflow.com/a/2363311/146325) – APC

+0

@APCあなたは、 DUALからのクエリがINSERTが使用しなかった値(例えば、類似の処理を行う並行処理)を返すことができるという事実を言及してください。シーケンスから2つの並行プロセスがnextvalを取得するだけです。私はあなたの最後の声明に同意しますが、あなたは並行性の問題をぶら下げました。 – jeff6times7

関連する問題