DEFAULT
fungerar för SERIAL
eftersom det anger standardvärdet för kolumn. Så
INSERT INTO Purchase VALUES (DEFAULT,'Lendl');
borde fungera. Men PurchasedItem.purchaseID
har inget standardvärde inställt, så den försöker infoga NULL
(och null finns inte i den refererade kolumnen ännu), så det misslyckas.
försök:
INSERT INTO Purchase(custName) VALUES ('Lendl') RETURNING purchaseID;
du kommer att se värdet på infogat purchaseID
, använd den i nästa fråga:
INSERT INTO PurchasedItem(purchaseID, itemNo) VALUES (_the_value_above_, 111);
commit;
Om du vill att den ska användas utan interaktivitet, använd DO
blockera med att returning purchaseID into _value
uppdatering :
eller cte, som
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