DEFAULT
fungerer for SERIAL
da den indstiller standardværdi for kolonne. Så
INSERT INTO Purchase VALUES (DEFAULT,'Lendl');
burde virke. Men PurchasedItem.purchaseID
har ingen standardværdi sat, så den forsøger at indsætte NULL
(og null er ikke i den refererede kolonne endnu), så det mislykkes.
prøv:
INSERT INTO Purchase(custName) VALUES ('Lendl') RETURNING purchaseID;
du vil se værdien af det indsatte purchaseID
, brug det i næste forespørgsel:
INSERT INTO PurchasedItem(purchaseID, itemNo) VALUES (_the_value_above_, 111);
commit;
Hvis du ønsker, at det skal bruges uden interaktivitet, skal du bruge DO
blokere med returning purchaseID into _value
opdatering :
eller cte, ligesom
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