簡體   English   中英

我們可以鎖定 Oracle 中不存在的數據嗎?

[英]Can we lock on non existing data in Oracle?

我們的用例與此類似:首先,我們需要檢查給定列是否存在活動記錄(非唯一),如果不存在則創建一個。 不幸的是,由於並發請求,重復插入已經發生。

示例架構/數據:

ID AccountNumber Status
1  12121321323   Y
2  97867585596   N

因此,如果表中不存在狀態為 Y 的 accountNumber,我們需要創建一個。 無論如何我們可以確保只有一條記錄存在(AccountNumber,Y 作為狀態)?

任何幫助表示贊賞。! 提前致謝。

您可以在表上創建唯一索引

create unique index only_one_active
    on your_table( case when status = 'Y'
                        then accountNumber
                        else null
                     end );

這將允許您使用相同的帳號和狀態為 N 的任意多行,但每個帳號只有一行狀態為 Y。

您可以將此構造用於示例並在一個事務中執行(開始/結束;如果您從 oracle 腳本執行此操作):

 merge into YOUR_TABLE
        using DUAL
            on (AccountNumber  = #{inputAccountNumber})
        when not matched then
            insert (AccountNumber, Status)
               values (12121321323, 'Y')
        when matched then
            update
               set Status= 'N'

在這里查看更多

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM