Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

मैं Oracle में एक अद्वितीय अनुक्रमणिका कैसे बना सकता हूं लेकिन नल को अनदेखा कर सकता हूं?

हम इसे फ़ंक्शन-आधारित अनुक्रमणिका के साथ कर सकते हैं। निम्नलिखित NVL2() का उपयोग करता है जो, जैसा कि आप जानते हैं, एक मान देता है यदि व्यंजक शून्य नहीं है और एक भिन्न मान यदि यह शून्य है। आप CASE() . का उपयोग कर सकते हैं बजाय।

SQL> create table blah (name varchar2(10), email varchar2(20))
  2  /

Table created.

SQL> create unique index blah_uidx on blah
  2      (nvl2(email, name, null), nvl2(name, email, null))
  3  /

Index created.

SQL> insert into blah values ('APC', null)
  2  /

1 row created.

SQL> insert into blah values ('APC', null)
  2  /

1 row created.

SQL> insert into blah values (null, '[email protected]')
  2  /

1 row created.

SQL> insert into blah values (null, '[email protected]')
  2  /

1 row created.

SQL> insert into blah values ('APC', '[email protected]')
  2  /

1 row created.

SQL> insert into blah values ('APC', '[email protected]')
  2  /
insert into blah values ('APC', '[email protected]')
*
ERROR at line 1:
ORA-00001: unique constraint (APC.BLAH_UIDX) violated


SQL>

संपादित करें

क्योंकि आपके परिदृश्य में नाम हमेशा भरा रहेगा, आपको केवल इस तरह की एक अनुक्रमणिका की आवश्यकता होगी:

SQL> create unique index blah_uidx on blah
  2      (nvl2(email, name, null), email)
  3  /

Index created.

SQL> 


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. स्क्रिप्ट निष्पादन पर एसक्यूएल त्रुटि। रिपॉजिटरी बनाने से पहले रिपॉजिटरी को हटाने का प्रयास करें

  2. Oracle में LISTAGG का उपयोग करके स्ट्रिंग स्वरूपण। एकल उद्धरण से बचना ` ' `

  3. क्या पीएल/एसक्यूएल के पास जावा के बराबर स्ट्रिंगटोकनाइज़र है?

  4. CLOB डेटा को डिक्रिप्ट करने के लिए DBMS_CRYPTO फ़ंक्शन का उपयोग करते समय त्रुटि

  5. MONTHS_BETWEEN () Oracle में फ़ंक्शन