Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
100 views
in Technique[技术] by (71.8m points)

java - Can we lock on non existing data in Oracle?

Our use case is something similar to this : First we need to check if an active record exists with the given column (non unique), if it does not then create one. Unfortunately duplicate inserts have been happening because of concurrent requests .

Sample schema/Data :

ID AccountNumber Status
1  12121321323   Y
2  97867585596   N

So if accountNumber with Status Y does not already exist in the table we need to create one. Is there anyway we can ensure that only one record exists with (AccountNumber , Y as status) ?

Any help is appreciated !! Thanks in advance.

question from:https://stackoverflow.com/questions/65846785/can-we-lock-on-non-existing-data-in-oracle

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

You can create a unique index on the table

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

That will allow you to have as many rows as you like with the same account number and a status of N but only one row per account number with a status of Y.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...