DEFAULT
funktioniert für SERIAL
da es den Standardwert für die Spalte festlegt. Also
INSERT INTO Purchase VALUES (DEFAULT,'Lendl');
sollte arbeiten. Aber PurchasedItem.purchaseID
hat keinen Standardwert gesetzt, also versucht es, NULL
einzufügen (und null ist noch nicht in der referenzierten Spalte), also schlägt es fehl.
versuche:
INSERT INTO Purchase(custName) VALUES ('Lendl') RETURNING purchaseID;
Sie sehen den Wert der eingefügten purchaseID
, verwenden Sie es in der nächsten Abfrage:
INSERT INTO PurchasedItem(purchaseID, itemNo) VALUES (_the_value_above_, 111);
commit;
Wenn Sie möchten, dass es ohne Interaktivität verwendet wird, verwenden Sie DO
Block mit returning purchaseID into _value
aktualisieren :
oder cte, etw wie
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