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

पीएल एसक्यूएल में बड़े टेक्स्ट/सीएसवी फाइल को कई फाइलों में विभाजित करें

कभी-कभी ऐसा होता है कि आपके पास संसाधित करने के लिए एक बहुत बड़ा टेक्स्ट या CSV फ़ाइल है, लेकिन पहले आप उस बड़ी फ़ाइल की छोटी फ़ाइलें बनाना चाहते हैं। क्योंकि उस बड़ी फाइल को प्रोसेस होने या खुलने में बहुत ज्यादा समय लग सकता है। इसलिए मैं नीचे एक उदाहरण दे रहा हूं ताकि बड़े टेक्स्ट/सीएसवी फाइल को पीएल एसक्यूएल में संग्रहित प्रक्रिया का उपयोग करके कई फाइलों में विभाजित किया जा सके।

आपको इस पीएल एसक्यूएल प्रक्रिया के लिए केवल दो पैरामीटर पास करने की आवश्यकता है, पहला डेटाबेस निर्देशिका ऑब्जेक्ट नाम है, जहां टेक्स्ट फ़ाइलें निवास कर रही हैं और दूसरा स्रोत फ़ाइल नाम है (वह फ़ाइल जिसे आप विभाजित करना चाहते हैं)।

यदि टेक्स्ट फ़ाइलों के स्थान के लिए Oracle निर्देशिका वस्तु मौजूद नहीं है, तो आप इसे नीचे दिखाए अनुसार बना सकते हैं:

For windows:
CREATE OR REPLACE DIRECTORY CSV_FILE_DIR AS 'D:\plsql\text_files';
For Linux/Unix (due to difference in path):
CREATE OR REPLACE DIRECTORY CSV_FILE_DIR AS '/plsql/text_files';

अपनी फ़ाइलों के स्थान के अनुसार ऊपर का पथ बदलें। फिर इसकी स्क्रिप्ट निष्पादित करके नीचे की प्रक्रिया बनाएं:

CREATE OR REPLACE PROCEDURE split_file (p_db_dir IN VARCHAR2,
 p_file_name IN VARCHAR2)
IS
 read_file UTL_FILE.file_type;
 write_file UTL_FILE.file_type;
 v_string VARCHAR2 (32767);
 j NUMBER := 1;
BEGIN
 read_file := UTL_FILE.fopen (p_db_dir, p_file_name, 'r');

WHILE j > 0
 LOOP
 write_file := UTL_FILE.fopen (p_db_dir, j || '_' || p_file_name, 'w');

FOR i IN 1 .. 100
 LOOP -- example to dividing into 100 rows for each file.. you can increase the number as per your requirement
 UTL_FILE.get_line (read_file, v_string);
 UTL_FILE.put_line (write_file, v_string);
 END LOOP;

UTL_FILE.fclose (write_file);
 j := J + 1;
 END LOOP;
EXCEPTION
 WHEN OTHERS
 THEN
 -- this will handle if reading source file contents finish
 UTL_FILE.fclose (read_file);
 UTL_FILE.fclose (write_file);
END;

यह प्रक्रिया प्रत्येक फ़ाइल के लिए 100 पंक्तियों को विभाजित करती है, जिसे आप अपनी आवश्यकता के अनुसार संशोधित कर सकते हैं। अब डेटाबेस निर्देशिका ऑब्जेक्ट नाम और फ़ाइल नाम पास करके नीचे दिखाए गए अनुसार इस प्रक्रिया को निष्पादित करें:

BEGIN
 split_file ('CSV_FILE_DIR', 'text_file.csv');
END;

आप 1_text_file.csv, 2_text_file.csv इत्यादि जैसी संख्याओं से शुरू होने वाली अनेक फ़ाइलों के लिए अपनी फ़ाइल स्थान (CSV_FILE_DIR) की जांच कर सकते हैं, जैसा कि नीचे चित्र में दिखाया गया है:

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle SQL डेवलपर टूल :डाउनलोड और इंस्टालेशन

  2. एक और 12c अनुकूलक श्वेत पत्र

  3. ORA-02287:यहां अनुक्रम संख्या की अनुमति नहीं है

  4. Oracle को एक चुनिंदा खंड द्वारा परिभाषित डेटा खंड के लिए चेकसम मान मिलता है

  5. Oracle.DataAccess.Client.OracleException ORA-03135:कनेक्शन खो गया संपर्क