2011-07-15 14 views
7

मुझे इतिहास बनाए रखना है और इसलिए मैं is_deleted कॉलम का उपयोग कर रहा हूं जिसमें 'वाई' या 'एन' हो सकता है। लेकिन is_deleted 'N' के किसी भी उदाहरण के लिए मुझे (ए, बी, सी) समग्र कॉलम के लिए uniwue प्रविष्टि होना चाहिए।ओरेकल: फ़ंक्शन आधारित इंडेक्स चुनिंदा विशिष्टता

जब मैं फ़ंक्शन आधारित अद्वितीय अनुक्रमणिका बनाने की कोशिश करता हूं तो मुझे त्रुटि मिल रही है। ORA-00907:

CREATE UNIQUE INDEX fn_unique_idx ON table1 (CASE WHEN is_deleted='N' then (id, name, type) end); 

लाइन 1 में त्रुटि लापता दायां कोष्ठक

कृपया मदद करते हैं।

धन्यवाद

उत्तर

13

आप

CREATE UNIQUE INDEX fn_unique_idx 
    ON table1 (CASE WHEN is_deleted='N' THEN id ELSE null END, 
       CASE WHEN is_deleted='N' THEN name ELSE null END, 
       CASE WHEN is_deleted='N' THEN type ELSE null END); 

की तरह कुछ कार्रवाई

SQL> create table table1 (
    2 id number, 
    3 name varchar2(10), 
    4 type varchar2(10), 
    5 is_deleted varchar2(1) 
    6 ); 

Table created. 

SQL> CREATE UNIQUE INDEX fn_unique_idx 
    2  ON table1 (CASE WHEN is_deleted='N' THEN id ELSE null END, 
    3     CASE WHEN is_deleted='N' THEN name ELSE null END, 
    4     CASE WHEN is_deleted='N' THEN type ELSE null END); 

Index created. 

SQL> insert into table1 values(1, 'Foo', 'Bar', 'N'); 

1 row created. 

SQL> insert into table1 values(1, 'Foo', 'Bar', 'Y'); 

1 row created. 

SQL> insert into table1 values(1, 'Foo', 'Bar', 'Y'); 

1 row created. 

SQL> insert into table1 values(1, 'Foo', 'Bar', 'N'); 
insert into table1 values(1, 'Foo', 'Bar', 'N') 
* 
ERROR at line 1: 
ORA-00001: unique constraint (SCOTT.FN_UNIQUE_IDX) violated 


SQL> insert into table1 values(1, 'Foo', 'Zee', 'N'); 

1 row created. 
+0

में बाधा का एक उदाहरण की आवश्यकता होगी लेकिन मेरी USECASE जब is_deleted = है 'एन' तो (आईडी का संयोजन, नाम, प्रकार) - समग्र कुंजी अद्वितीय होना चाहिए। क्या आपकी क्वेरी वही प्राप्त होगी? –

+0

@Andriod_enthusiast - यह निश्चित रूप से प्रतीत होता है। मैंने अपना जवाब परीक्षण के साथ अपडेट किया। –

+0

बहुत धन्यवाद। इसकी प्रशंसा करना। तो अगर मुझे इन कॉलमों पर शून्य नहीं है तो मुझे लगता है कि मैं ईएलएसई शून्य –

संबंधित मुद्दे