DEFAULT
fonctionnera pour SERIAL
car il définit la valeur par défaut pour la colonne. Alors
INSERT INTO Purchase VALUES (DEFAULT,'Lendl');
devrait marcher. Mais PurchasedItem.purchaseID
n'a pas de valeur par défaut définie, il essaie donc d'insérer NULL
(et null n'est pas encore dans la colonne référencée), donc cela échoue.
essayez :
INSERT INTO Purchase(custName) VALUES ('Lendl') RETURNING purchaseID;
vous verrez la valeur de purchaseID
inséré , utilisez-le dans la requête suivante :
INSERT INTO PurchasedItem(purchaseID, itemNo) VALUES (_the_value_above_, 111);
commit;
Si vous voulez qu'il soit utilisé sans interactivité, utilisez DO
bloquer avec returning purchaseID into _value
mettre à jour :
ou cte, qch comme
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