2009-08-05 11 views
14

का उपयोग कर रहा एसक्यूएल लोडर के साथ एक पाइप सीमांकित फ़ाइल पढ़ रहा हूँ और टेबल मैं पॉप्युलेट कर रहा हूँ में एक LAST_UPDATED क्षेत्र को भरने के लिए चाहते हैं के साथ एक टाइमस्टैम्प क्षेत्र को भरने के लिए। मेरे नियंत्रण फ़ाइल इस तरह दिखता है:कैसे वर्तमान टाइमस्टैम्प Oracle SQL लोडर

LOAD DATA 
INFILE SampleFile.dat 
REPLACE 
INTO TABLE contact 
FIELDS TERMINATED BY '|' 
OPTIONALLY ENCLOSED BY '"' 
(
ID, 
FIRST_NAME, 
LAST_NAME, 
EMAIL, 
DEPARTMENT_ID, 
LAST_UPDATED SYSTIMESTAMP 
) 

LAST_UPDATED क्षेत्र मैं SYSTIMESTAMP और CURRENT_TIMESTAMP और न काम की कोशिश की है के लिए। SYSDATE हालांकि ठीक काम करता है लेकिन मुझे दिन का समय नहीं देता है।

मैं एसक्यूएल लोडर के लिए एकदम नया हूँ इसलिए मैं वास्तव में यह क्या है या में सक्षम नहीं है के बारे में बहुत कम जानते हैं। धन्यवाद।

उत्तर

12

आप की कोशिश की है निम्नलिखित:

CURRENT_TIMESTAMP [(सटीक)]

 
select current_timestamp(3) from dual; 

CURRENT_TIMESTAMP(3) 
----------------------------- 
10-JUL-04 19.11.12.686 +01:00 

SQLLDR में ऐसा करने के लिए, आप सीटीएल फ़ाइल में अभिव्यक्ति का उपयोग करने के लिए इतना है कि SQLLDR के इलाज के लिए जानता है की आवश्यकता होगी एसक्यूएल के रूप में कॉल करें।

बदलें:

 
LAST_UPDATED SYSTIMESTAMP 

साथ:

 
LAST_UPDATED EXPRESSION "current_timestamp(3)" 
+0

फिर भी नहीं करता है ' टी पसंद है। मुझे इस त्रुटि देता है: एसक्यूएल * लोडर-350: लाइन 17. उम्मीद में सिंटेक्स त्रुटि "," या ")", मिला "CURRENT_TIMESTAMP"। LAST_UPDATED CURRENT_TIMESTAMP (3) – Sen

+0

तुम क्या कर की कोशिश कर सकते हैं: LAST_UPDATED अभिव्यक्ति "CURRENT_TIMESTAMP का चयन करें (3) दोहरी से" या LAST_UPDATED अभिव्यक्ति "CURRENT_TIMESTAMP (3)" –

+0

हेहे, ठीक है, कि महान काम करता है: LAST_UPDATED अभिव्यक्ति "CURRENT_TIMESTAMP (3) ", दोहरी विकल्प से चयन किसी कारण से नहीं था। हालांकि, पता चला है कि SYSDATE ठीक काम करेगा। मैं एक जवाब में समझाऊंगा। – Sen

3

मैं आर सी का जवाब स्वीकार किया, क्योंकि अंत में उन्होंने उत्तर दिया कि मैं क्या पूछ रहा था लेकिन Oracle की उपकरण से कुछ के साथ मेरी अलोकप्रियता मुझे नेतृत्व इस और अधिक कठिन बनाने के लिए इसकी आवश्यकता होने की तुलना में।

मैं सिर्फ एक तारीख के बजाय एक टाइमस्टैम्प रिकॉर्ड करने के लिए एसक्यूएल * लोडर पाने के लिए कोशिश कर रहा था। जब मैं मेज पर SYSDATE इस्तेमाल किया है, और फिर किया कुछ चुने हुए यह केवल लिस्टिंग था तारीख (05-Aug-09)।

फिर, मैंने कोशिश की आर सी की विधि (टिप्पणी में) है और यह काम किया। हालांकि, फिर भी, जब मैंने टेबल पर चयन किया तो मुझे एक ही दिनांक प्रारूप मिला। तो यह मेरे लिए हुआ यह सिर्फ प्रदर्शन प्रयोजनों के लिए शेष छोटा किया जा सकता है। तो मैंने एक किया:

select TO_CHAR(LAST_UPDATED,'MMDDYYYY:HH24:MI:SS') from contact; 

और फिर यह सबकुछ प्रदर्शित हुआ। तब मैं वापस नियंत्रण फ़ाइल के पास गया और SYSDATE करने के लिए इसे वापस बदल गया है और काफी समान क्वेरी और यह सुनिश्चित करें भाग गया, HH: एमआई: एसएस वहाँ और सटीक थी।

यह सब SqlDeveloper में किया जा रहा है। मैं क्यों यह इस व्यवहार के लिए चूक पता नहीं है। स्क्वाल्ड डेवलपर में निम्नलिखित दो कथन भी मुझे फेंक दिया।

SELECT CURRENT_TIMESTAMP FROM DUAL; //returns a full date and time 

SELECT SYSDATE FROM DUAL; // returns only a date 
+4

SYSDATE एक DATE डेटा प्रकार देता है (लेकिन इसमें घंटे और सेकंड शामिल हैं)। CURRENT_TIMESTAMP एक TIMESTAMP डेटा प्रकार देता है जो आंशिक सेकंड (http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/sql_elements001.htm#i53219) पर जाता है। इन दोनों में आंतरिक प्रतिनिधित्व हैं (उदाहरण के लिए DATE को 7 बाइट्स के रूप में आयोजित किया जाता है) और ग्राहक चुनता है कि उन्हें कैसे प्रदर्शित किया जाए। –

0

SQL डेवलपर समय में: ALTER सत्र सेट NLS_DATE_FORMAT = 'YYYY-MM-DD HH24: एमआई: एस एस'

और फिर चयन SYSDATE साथ यह जाँच से दो

+0

यह काम नहीं करेगा - आप तिथि को बिल्कुल नहीं बदल रहे हैं और आप _different_ सत्र बदल रहे हैं। – Ben

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