DEFAULT
SERIAL
. के लिए काम करेगा क्योंकि यह कॉलम के लिए डिफ़ॉल्ट मान सेट करता है। तो
INSERT INTO Purchase VALUES (DEFAULT,'Lendl');
कार्य करना चाहिए। लेकिन PurchasedItem.purchaseID
कोई डिफ़ॉल्ट मान सेट नहीं है, इसलिए यह NULL
insert डालने का प्रयास करता है (और नल अभी तक संदर्भित कॉलम में नहीं है), इसलिए यह विफल हो जाता है।
कोशिश करें:
INSERT INTO Purchase(custName) VALUES ('Lendl') RETURNING purchaseID;
आप सम्मिलित purchaseID
. का मान देखेंगे , अगली क्वेरी में इसका इस्तेमाल करें:
INSERT INTO PurchasedItem(purchaseID, itemNo) VALUES (_the_value_above_, 111);
commit;
यदि आप चाहते हैं कि इसका उपयोग अन्तरक्रियाशीलता के बिना किया जाए, तो DO
. का उपयोग करें returning purchaseID into _value
. के साथ ब्लॉक करें
अपडेट करें :
या सीटीई, smth लाइक
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