बधाई सराहना की होगी, कि एक रक्षक है!
प्रकार = 12 लेन = 7: 100,100,0,0,1,1,1
कि डंप में तत्वों सदी, वर्ष, माह, दिन, घंटा मिनट दूसरे कर रहे हैं। तो क्या तुम वहाँ है 0-0-0000 पर midight है, जो निश्चित रूप से एक मान्य दिनांक नहीं है ...
SQL> create table d (d1 date)
2/
Table created.
SQL> insert into d values (to_date('00-00-0000', 'dd-mm-yyyy'))
2/
insert into d values (to_date('00-00-0000', 'dd-mm-yyyy'))
*
ERROR at line 1:
ORA-01847: day of month must be between 1 and last day of month
SQL>
संपादित
मैं एक में एक शून्य की तारीख लोहदंड के लिए गैरी उत्कृष्ट चाल का इस्तेमाल किया है टेबल ....
SQL> select * from d
2/
D1
---------
00-DECEMB
19-JAN-10
SQL>
तो कम से कम हम जानते हैं कि आपके "जादू" डेवलपर्स ने यह कैसे किया। अब हमें बस अपनी चतुरता के आसपास काम करना है।
मुझे लगता है कि एक ही रास्ता यह करने के लिए - और आप शायद नहीं पसंद करने के लिए यह जा रहे हैं - एक एपीआई परत का निर्माण करने, विचारों का उपयोग है ....
SQL> create or replace view v_d as
2 select case when d1 = trash_date then null else d1 end as d1
3 from d
4/
View created.
SQL> select * from v_d
2/
D1
---------
19-JAN-10
SQL>
का नहीं कम से कम परेशान पहलू यह है कि आपको INSTEAD IF ट्रिगर्स की आवश्यकता होगी जो वास्तव में अंतर्निहित तालिका में शून्य तिथियां डालें (फिर, गैरी के फ़ंक्शन का उपयोग करके)। इसके अलावा, एक ही ऑब्जेक्ट नामों को बनाए रखने के लिए आपको शायद एक अलग स्कीमा में एपीआई बनाने की आवश्यकता होगी।
तो मैं शामिल काम की मात्रा को कम नहीं कर रहा हूं। समस्या यह है कि पिछले डेवलपर्स ने अपने समाधान के साथ बहुत सारे तकनीकी ऋण चलाए। अब यह उस ऋण पर विग का भुगतान करने के लिए नीचे है (यह देखते हुए कि आप डेटाबेस को फिर से लिखकर पूंजी का भुगतान नहीं करना चाहते हैं)।
देर ब्रेकिंग न्यूज़
मैं बस जो इन हास्यास्पद दिनांकों एक वैकल्पिक व्याख्या प्रदान करता है अपने ही पर्यावरण, में इस हास्यास्पद तारीख भर में आ गए हैं। मैंने पंक्तियों वाली एक तालिका में एक DATE कॉलम जोड़ा। मैंने sysdate को डिफ़ॉल्ट मान सेट करने के लिए DEFAULT क्लॉज का उपयोग किया। अंदाज़ा लगाओ की क्या हुआ?
SQL> select * from t69
2/
ID
----------
1
2
SQL> alter table t69 add col2 date default sysdate not null
2/
Table altered.
SQL> select * from t69
2/
ID COL2
---------- ---------
1 00-DECEMB
2 00-DECEMB
SQL>
रिकॉर्ड के लिए, sysdate नई पंक्तियों के लिए अपेक्षित काम करता है ...
SQL> insert into t69 (id) values (3)
2/
1 row created.
SQL> select * from t69
2/
ID COL2
---------- ---------
1 00-DECEMB
2 00-DECEMB
3 28-APR-10
SQL>
कृपया कुछ स्पष्ट करें। क्या ये तिथियां पहले से ही आपके ओरेकल डेटाबेस में हैं? यदि हां, तो क्या वे वास्तव में एक दिनांक डेटाटाइप के साथ कॉलम में आयोजित किए जाते हैं? या आप उन्हें एक अलग डेटाबेस उत्पाद से आयात करने की कोशिश कर रहे हैं। – APC
हाँ, ये तिथियां पहले से ही डेटाबेस में हैं। कॉलम DATE डेटाटाइप का है। – Noam
जब आप .NET ऐप में पंक्ति को पढ़ते हैं जो कॉलम में दिखाई देता है? –