私は過去にSQL Serverを使用したことがある、Oracleの初心者です。ストアド プロシージャがあり、2 つの INSERT を次々に実行しようとしています。2 番目の INSERT には、最初の INSERT の ID が必要です。誰かがそれを行う方法を説明できますか?
SEQUENCE
s とnextvalue/curval
?に関するものを見ています。
SQL Server では、変数を宣言して を使用するだけなSCOPE_IDENTITY
ので、それを行うつもりです。
私は過去にSQL Serverを使用したことがある、Oracleの初心者です。ストアド プロシージャがあり、2 つの INSERT を次々に実行しようとしています。2 番目の INSERT には、最初の INSERT の ID が必要です。誰かがそれを行う方法を説明できますか?
SEQUENCE
s とnextvalue/curval
?に関するものを見ています。
SQL Server では、変数を宣言して を使用するだけなSCOPE_IDENTITY
ので、それを行うつもりです。
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;
いくつかのアプローチがあります。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
新しい主キーを生成します)。