我對來自 T-SQL 的 PL-SQL 有點陌生。
我有一個要求,每個用戶 ID 只允許一個電話號碼,但電話號碼列可以根據需要多次為空。
所以表是:
| 用戶身份 | 電話號碼 |
|---|---|
| 1 | 無效的 |
| 1 | 9735152122 |
| 1 | 無效的 |
| 2 | 無效的 |
| 3 | 無效的 |
| 1 | 2124821212 |
這是我需要阻止的最后一個,盡管前三個很好。在這種情況下,我說的是我發布的示例表,而不是實際的表順序。我只需要允許 NULL 通過,但如果每個給定的用戶 ID 有重復的電話號碼,則阻止。
我已經閱讀了有關功能索引的資訊,但不確定如何在此處應用它們。
uj5u.com熱心網友回復:
CREATE UNIQUE INDEX my_index ON my_table (
CASE WHEN phone_number IS NULL THEN NULL ELSE user_id END,
phone_number
)
使用此邏輯,如果phone_number為 NULL,則索引中的兩個值都將為NULL,因此該行將從索引中排除。如果phone_number不為 NULL,則該行將包含在具有實際值的索引中user_id,phone_number并且將強制執行唯一性。
PS 這不是“PL/SQL”,它是 Oracle SQL。PL/SQL 是用于撰寫觸發器、函式等的程序語言。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/518042.html
標籤:甲骨文plsql
上一篇:PL/SQL:ORA-01744:不適當的INTO(2)
下一篇:sqlunion和join結合
