यह एक आम समस्या है और इसका कोई सटीक समाधान नहीं है। कुछ समाधान:
1. varchar2 प्रकार के X फ़ील्ड, प्रकार संख्या के Y फ़ील्ड और दिनांक प्रकार के Z फ़ील्ड परिभाषित करें। यह संभावित रूप से कस्टम फ़ील्ड की संख्या से 3 गुना अधिक निकलता है लेकिन आपको अब कभी भी कोई रूपांतरण समस्या नहीं होगी।
आपका उदाहरण इस तरह सामने आएगा:
Id Name field_char1 field2_char2 field_char3 ... field_num1 field_num2 ...
1 lap1 lappy lappy lappy ... 12 13
2 lap2 lappy2 lappy2 lapp2 ... 13 12
आपके उदाहरण में आपके पास दोनों पंक्तियों पर समान संख्या में संख्यात्मक मान और वर्ण मान हैं, लेकिन यह इस तरह नहीं होना चाहिए:उदाहरण के लिए तीसरी पंक्ति में कोई संख्यात्मक फ़ील्ड नहीं हो सकता है।
2. varchar2 प्रकार के X फ़ील्ड को परिभाषित करें और संख्या या दिनांक फ़ील्ड को संग्रहीत करने के लिए एक विशेषण फ़ंक्शन लागू करें (उदाहरण के लिए दिनांक को YYYYMMDDHH24miss
के रूप में संग्रहीत किया जा सकता है। ) आपको एक अतिरिक्त फ़ील्ड की भी आवश्यकता होगी जो पंक्ति के संदर्भ को परिभाषित करेगी। आप to_number
. लागू करेंगे या to_char
केवल तभी कार्य करें जब पंक्तियाँ अच्छे प्रकार की हों।
आपका उदाहरण:
Id Name context field1 field2 field3 field4 field5
1 lap1 type A lappy lappy 12 13 lappy
2 lap2 type B lappy2 13 lappy2 lapp2 12
आप DECODE या CASE का उपयोग करके तालिका को क्वेरी कर सकते हैं:
SELECT *
FROM laptop
WHERE CASE WHEN context = 'TYPE A' THEN to_number(field3) END = 12
दूसरा डिज़ाइन वह है जिसका उपयोग Oracle Financials ERP (दूसरों के बीच) में किया जाता है। संदर्भ आपको इस डिज़ाइन के साथ CHECK बाधाओं को परिभाषित करने की अनुमति देता है (उदाहरण के लिए CHECK (CASE WHEN context = 'TYPE A' THEN to_number(field3) > 0
) अखंडता सुनिश्चित करने के लिए।