DEFAULT
akan bekerja untuk SERIAL
karena menetapkan nilai default untuk kolom. Jadi
INSERT INTO Purchase VALUES (DEFAULT,'Lendl');
harus bekerja. Tapi PurchasedItem.purchaseID
tidak memiliki nilai default yang ditetapkan, jadi ia mencoba memasukkan NULL
(dan null belum ada di kolom referensi), jadi gagal.
coba:
INSERT INTO Purchase(custName) VALUES ('Lendl') RETURNING purchaseID;
Anda akan melihat nilai yang dimasukkan purchaseID
, gunakan dalam kueri berikutnya:
INSERT INTO PurchasedItem(purchaseID, itemNo) VALUES (_the_value_above_, 111);
commit;
Jika Anda ingin digunakan tanpa interaktivitas, gunakan DO
blokir dengan returning purchaseID into _value
perbarui :
atau cte, seperti
WITH i AS (
INSERT INTO Purchase(custName, orderedDate)
VALUES ('Lendl', '2016-09-28')
RETURNING purchaseID
)
insert into PurchasedItem
select i.purchaseID,'smth',3
from i