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

पीएल/एसक्यूएल के माध्यम से ओरेकल निर्यात करने का प्रयास करने की तारीख 0000-00-00

उस कॉलम में संग्रहीत मान मान्य दिनांक नहीं है। dump का पहला बाइट सदी होनी चाहिए, जो कि Oracle समर्थन नोट 69028.1 के अनुसार 'अतिरिक्त -100' अंकन में संग्रहीत है, जिसका अर्थ है कि इसका मान 100 + वास्तविक शताब्दी होना चाहिए; तो 1900 119 होगा, 2000 120 होगा, और 5500 155 होगा। तो 44 -5600 का प्रतिनिधित्व करेगा; आपके द्वारा संग्रहीत तिथि वास्तव में 5544-09-14 BC . का प्रतिनिधित्व करती प्रतीत होती है . चूंकि Oracle केवल -4713 और +9999 के बीच की तारीखों का समर्थन करता है, इसलिए इसे मान्यता नहीं मिली है।

आप इसे काफी आसानी से फिर से बना सकते हैं; ट्रिकिएस्ट बिट को पहली बार में डेटाबेस में अमान्य तिथि मिल रही है:

create table t42(dt date);

Table created.

declare
    d date;
begin
    dbms_stats.convert_raw_value('2c9c090e010101', d);
    insert into t42 (dt) values (d);
end;
/

PL/SQL procedure successfully completed.

select dump(dt), dump(dt, 1016) from t42;

DUMP(DT)
--------------------------------------------------------------------------------
DUMP(DT,1016)
--------------------------------------------------------------------------------
Typ=12 Len=7: 45,56,9,14,1,1,1
Typ=12 Len=7: 2d,38,9,e,1,1,1

तो इसमें आपके द्वारा किए गए समान डेटा के साथ एक ही पंक्ति है। alter session का उपयोग करना मैं देख सकता हूँ कि वैध तिथि कैसी दिखती है:

alter session set nls_date_format = 'DD-Mon-YYYY';
select dt from t42;

DT
-----------
14-Sep-5544

alter session set nls_date_format = 'YYYYMMDDHH24MISS';
select dt from t42;

DT
--------------
55440914000000

लेकिन अगर मैं एक स्पष्ट तिथि मुखौटा का उपयोग करता हूं तो यह शून्य हो जाता है:

select to_char(dt, 'DD-Mon-YYYY'), to_char(dt, 'YYYYMMDDHH24MISS') from t42;

TO_CHAR(DT,'DD-MON-Y TO_CHAR(DT,'YY
-------------------- --------------
00-000-0000          00000000000000

और अगर मैं आपकी प्रक्रिया चलाता हूं:

exec dump_table_to_csv('T42');

परिणामी सीएसवी में है:

"DT"
"0000-00-00T00:00:00"

मुझे लगता है कि अंतर यह है कि जो लोग दिनांक दिखाने का प्रयास करते हैं वे आंतरिक दिनांक डेटा प्रकार 12 के साथ चिपके रहते हैं, जबकि जो शून्य दिखाते हैं वे बाहरी डेटा प्रकार 13 का उपयोग कर रहे हैं, जैसा कि नोट 69028.1 में बताया गया है।

तो संक्षेप में, आपकी प्रक्रिया कुछ भी गलत नहीं कर रही है, जिस तारीख को वह निर्यात करने का प्रयास कर रहा है वह आंतरिक रूप से अमान्य है। जब तक आप यह नहीं जानते कि यह किस तारीख को होना चाहिए था, जो आपके शुरुआती बिंदु को देखते हुए असंभव लगता है, मुझे नहीं लगता कि आप इसके बारे में अनुमान लगाने या इसे अनदेखा करने के अलावा बहुत कुछ कर सकते हैं। जब तक, शायद, आप नहीं जानते कि डेटा कैसे डाला गया था और यह पता लगा सकता है कि यह कैसे दूषित हुआ।

मुझे लगता है कि यह ओसीआई कार्यक्रम से होने की अधिक संभावना है जो मैंने यहां किया था; यह 'कच्ची' चाल मूल रूप से यहीं की थी। आप नोट 331831.1 को भी देखना चाहेंगे। और यह पिछला प्रश्न कुछ हद तक संबंधित है।




  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 में तालिका के स्तंभों को पुन:क्रमित करें

  3. भौतिक दृश्य बनाम टेबल्स:क्या फायदे हैं?

  4. Oracle में मॉनिटरिंग टेबल चेंज

  5. ओरेकल 11 जी और जेडीके 1.6 के साथ किस जेडीबीसी जार का उपयोग करना है और डीबी से कैसे कनेक्ट करना है