DEFAULT
bude fungovat pro SERIAL
protože nastavuje výchozí hodnotu pro sloupec. Takže
INSERT INTO Purchase VALUES (DEFAULT,'Lendl');
měl by pracovat. Ale PurchasedItem.purchaseID
nemá nastavenou žádnou výchozí hodnotu, takže se snaží vložit NULL
(a null ještě není v odkazovaném sloupci), takže selže.
zkuste:
INSERT INTO Purchase(custName) VALUES ('Lendl') RETURNING purchaseID;
uvidíte hodnotu vloženého purchaseID
, použijte jej v dalším dotazu:
INSERT INTO PurchasedItem(purchaseID, itemNo) VALUES (_the_value_above_, 111);
commit;
Pokud chcete, aby se používal bez interaktivity, použijte DO
zablokovat s returning purchaseID into _value
aktualizovat :
nebo cte, něco jako
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