DEFAULT
werkt voor SERIAL
omdat het de standaardwaarde voor kolom instelt. Dus
INSERT INTO Purchase VALUES (DEFAULT,'Lendl');
zou moeten werken. Maar PurchasedItem.purchaseID
heeft geen standaardwaarde ingesteld, dus het probeert NULL
. in te voegen (en null staat nog niet in de kolom waarnaar wordt verwezen), dus het mislukt.
probeer:
INSERT INTO Purchase(custName) VALUES ('Lendl') RETURNING purchaseID;
u ziet de waarde van de ingevoegde purchaseID
, gebruik het in de volgende zoekopdracht:
INSERT INTO PurchasedItem(purchaseID, itemNo) VALUES (_the_value_above_, 111);
commit;
Als je wilt dat het zonder interactiviteit wordt gebruikt, gebruik dan DO
blok met returning purchaseID into _value
bijwerken :
of cte, zoiets als
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