1

重複の可能性:
Oracle db に最後に挿入されたレコードの ID を取得する

私は過去にSQL Serverを使用したことがある、Oracleの初心者です。ストアド プロシージャがあり、2 つの INSERT を次々に実行しようとしています。2 番目の INSERT には、最初の INSERT の ID が必要です。誰かがそれを行う方法を説明できますか?

SEQUENCEs とnextvalue/curval?に関するものを見ています。

SQL Server では、変数を宣言して を使用するだけなSCOPE_IDENTITYので、それを行うつもりです。

4

2 に答える 2

4

2 つの可能性があります。数値生成にシーケンスを使用している場合 (Oracle には MySQL のような自動数値フィールドがないため、おそらくそうです)、次のようにシーケンスから値を取得できます。

select SequenceName.currval into AVariable from dual

もう 1 つのオプションは、次のreturningように句を使用することです。

declare
  AVariable int;
begin
  insert into yourtable(columns) 
  values (values) 
  returning id into AVariable;

  insert into anotherTable(columns)
  values(AVariable, othervalues);
end;
于 2012-10-22T19:46:15.050 に答える
0

いくつかのアプローチがあります。1 つのオプションは、RETURNING句を使用することです。

DECLARE
  l_generated_id INTEGER;
BEGIN
  INSERT INTO table_name( <<column list>> )
    VALUES( <<values list>>
    RETURNING <<name of primary key column>>
         INTO l_generated_id;
  INSERT INTO other_table( <<column list>> )
    VALUES( l_generated_id, <<other values>> );
END;

主キーが (トリガーの有無にかかわらず) シーケンスを介して入力されることがわかっていて、そのシーケンスの名前がわかっている場合はsequence_name.currval、2 番目INSERTのステートメントで を使用できます (最初のINSERTステートメントは、直接またはトリガーを介して、sequence_name.nextval新しい主キーを生成します)。

于 2012-10-22T19:47:25.053 に答える