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

संग्रहित प्रक्रिया का उपयोग करके Oracle तालिका में CSV फ़ाइल आयात करें

CSV फ़ाइल एक अल्पविराम सीमांकित फ़ाइल है जिसमें फ़ील्ड को अल्पविराम द्वारा अलग किया जाता है। इस लेख में, मैं संग्रहीत कार्यविधि का उपयोग करके CSV फ़ाइल को oracle तालिका में आयात करने के लिए एक उदाहरण दे रहा हूँ। Oracle में संग्रहीत कार्यविधि एक PL/SQL प्रोग्राम इकाई है जो एक स्टैंड-अलोन या डेटाबेस पैकेज में हो सकती है।

आपके पास Oracle डेटाबेस में एक निर्देशिका ऑब्जेक्ट होना चाहिए जो सर्वर पथ को संदर्भित करता है जिसमें फ़ाइल संग्रहीत है। नीचे दिए गए उदाहरण में मैं निर्देशिका ऑब्जेक्ट नाम का उपयोग CSV_DIR के रूप में कर रहा हूं और प्रक्रिया का नाम read_csv है। सीमांकित स्ट्रिंग को एक-एक करके प्राप्त करने के लिए read_csv प्रक्रिया में एक फ़ंक्शन GetString भी बनाया

PL/SQL प्रक्रिया का उपयोग करके CSV फ़ाइल को Oracle तालिका में लोड करना

CREATE OR REPLACE PROCEDURE read_csv
IS
l_file_type UTL_FILE.file_type;

l_string VARCHAR2 (32765);

TYPE Fieldvalue IS TABLE OF VARCHAR2 (4000)
INDEX BY BINARY_INTEGER;

t_field Fieldvalue;

FUNCTION GetString (Source_string IN VARCHAR2,
Field_position IN NUMBER,
UnTerminated IN BOOLEAN DEFAULT FALSE,
Delimiter IN VARCHAR2 DEFAULT ',')
RETURN VARCHAR2
IS
iPtrEnd PLS_INTEGER := 0;
iPtrStart PLS_INTEGER := 0;
vcSourceStrCopy VARCHAR2 (4000) := Source_string;
BEGIN
IF UnTerminated
THEN
vcSourceStrCopy := vcSourceStrCopy || Delimiter;
END IF;

IF Field_Position > 1
THEN
iPtrStart :=
INSTR (vcSourceStrCopy,
Delimiter,
1,
Field_Position - 1)
+ LENGTH (Delimiter);
ELSE
iPtrStart := 1;
END IF;

iPtrEnd :=
INSTR (vcSourceStrCopy,
Delimiter,
1,
Field_Position);
RETURN SUBSTR (vcSourceStrCopy, iPtrStart, (iPtrEnd - iPtrStart));
END GetString;
BEGIN
l_file_type := UTL_FILE.Fopen ('CSV_DIR', 'abc.csv', 'r');

LOOP
UTL_FILE.Get_Line (l_file_type, l_string);

l_string := l_string || ',';

FOR n IN 1 .. REGEXP_COUNT (l_string, ',')
LOOP
t_field (n) :=
Getstring (l_string,
n,
FALSE,
',');

END LOOP;

INSERT INTO EMP (EMPNO,
ENAME,
JOB,
MGR,
HIREDATE,
SAL,
COMM,
DEPTNO)
VALUES (t_field (1),
t_field (2),
t_field (3),
t_field (4),
TO_DATE (t_field (5), 'dd/mm/yyyy'),
t_field (6),
t_field (7),
t_field (8));
END LOOP;

UTL_FILE.Fclose (l_file_type);

COMMIT;
EXCEPTION
WHEN OTHERS
THEN
IF UTL_FILE.is_open (l_file_type)
THEN
UTL_FILE.Fclose (l_file_type);
END IF;
END;

कृपया ध्यान दें कि लक्ष्य तालिका को सही ढंग से मैप करने के लिए आपको अपनी CSV फ़ाइल का अध्ययन करना चाहिए। अपने CSV दिनांक डेटा प्रारूप के अनुसार दिनांक फ़ील्ड के लिए दिनांक स्वरूप को भी संभाल लें।

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ओआरए-00604 ओआरए-12705

  2. ऑरैकल ड्रॉप इंडेक्स अगर मौजूद है

  3. एसएसआईएस पैकेजों को सहेजने में विफल रहा और विजुअल स्टूडियो को रीबूट करता है

  4. पीएल/एसक्यूएल, स्ट्रिंग में सिंगल कोट से कैसे बचें?

  5. ऑरैकल में रैंक () और DENSE_RANK () कार्यों के बीच क्या अंतर है?