我在Oracle SQL中遇到以下問題。 gt_general2是一個全局臨時表。使用INSERT INTO的Oracle SQL鎖定行
INSERT INTO gt_general2 (n_1, n_2, n_3)
select p.x_id, a.y_id, a.dollar_amt
from table_P p, table_A a
where p.x_id = a.x_id
and a.h_date = i_date
and a.dollar_amt > 0
for update of p.x_id, a.dollar_amt nowait; --this is the problem statement
當我嘗試使用SELECT ... FOR語法的INSERT ... SELECT語法時,Oracle不喜歡。 我想在執行此插入操作時鎖定行,因爲真正的查詢實際上相當複雜(並且會對其他視圖進行一些檢查以確保父記錄存在,等等),並且這樣我可以在執行此操作時插入臨時表該行鎖定在一次通過中。
是否有一些其他語法我錯過,這將允許我這樣做?在概念層面上,我沒有看到Oracle爲什麼不允許我從表P和A中選擇行,將它們鎖定在過程中,並將值插入到另一個表Z中的任何原因。我已經可以完成此操作:
select p.x_id, a.y_id
BULK COLLECT into x_id_list, y_id_list
from table_P, table_A
where ...
for update nowait;
當然可以通過執行此查詢兩次鎖定行 - 一次鎖定,一次插入。以前,我是這樣做的,並使用鎖定查詢檢索數組中的「x_id」值以幫助執行INSERT INTO查詢。但我碰到的問題是,x_id值不足以識別我想要的行;我需要這對(x_id,y_id),並且不能創建一個新的嵌套表類型來存儲它。
「無法創建一個新的嵌套表類型來存儲它」......由於技術限制或特權? –