引用比方說,我有一個項目表,併爲每個項目,也可以是存儲它的附加信息,這些信息將進入第二個表。附加信息由FK在第一個表中引用,可以爲NULL(如果該項沒有附加信息)。做UPSERT當行由FK
TABLE item (
...
item_addtl_info_id INTEGER
)
CONSTRAINT fk_item_addtl_info FOREIGN KEY (item_addtl_info)
REFERENCES addtl_info (addtl_info_id)
TABLE addtl_info (
addtl_info_id INTEGER NOT NULL
GENERATED BY DEFAULT
AS IDENTITY (
INCREMENT BY 1
NO CACHE
),
addtl_info_text VARCHAR(100)
...
CONSTRAINT pk_addtl_info PRIMARY KEY (addtl_info_id)
)
什麼是「最佳實踐」來更新項目的附加信息(最好在IBM DB2 SQL中)?
它應該是一個UPSERT操作,這意味着如果附加信息尚不存在,則在第二個表中創建一個新記錄,但是如果它有,則只會更新,而第一個表中的FK會不變。
因此勢在必行,這是邏輯:
UPSERT(item, item_info):
CASE WHEN item.item_addtl_info_id IS NULL THEN
INSERT INTO addtl_info (item_info)
UPDATE item.item_addtl_info_id (addtl_info.addtl_info_id)
^^^^^^^^^^^^^
ELSE
UPDATE addtl_info (item_info)
END
我的主要問題是如何獲得新插入的addtl_info行的ID(以上的下劃線)。在一個存儲過程中,我可以從一個序列中請求該ID並將其存儲在一個變量中,但也許有一種更直接的方法。編程數據庫時不是總是出現這種情況嗎?
我的意思是,我真的不感興趣的只是addtl_info記錄的ID,只要它仍是唯一的,正確引用。所以在這種情況下使用序列對我來說似乎有點矯枉過正。
由於事實上,這UPSERT操作應該是SQL語言作爲標準操作的一部分(也許是的,我只是不知道呢?)......