2011-06-13 9 views
9

मेरे पास एक डेटाबेस है जिसमें बीएलओबी फ़ील्ड में कई फाइलें संग्रहीत हैं।मैं ओरेकल बीएलओबी क्षेत्र से फ़ाइलों को कैसे निकाल सकता हूं?

मैं & मूल फ़ाइलों को कैसे सहेज सकता हूं? कई अलग-अलग फ़ाइल प्रकार हैं - डॉक्टर, पीडीएफ, एक्सएलएस, आदि तालिका में एक कॉल में विस्तार है, और मूल फ़ाइल नाम दूसरे में है। एक ही फ़ाइल नाम के साथ कई फाइलें भी हो सकती हैं।

उत्तर

10

आप UTL_FILE पैकेज का उपयोग कर सकते हैं संस्करण 9i के बाद

कुछ इस तरह में यह करने के लिए:

DECLARE 
    l_file  UTL_FILE.FILE_TYPE; 
    l_buffer RAW(32767); 
    l_amount BINARY_INTEGER := 32767; 
    l_pos  NUMBER := 1; 
    l_blob  BLOB; 
    l_blob_len NUMBER; 
BEGIN 

    SELECT blobcol 
    INTO l_blob 
    FROM table 
    WHERE rownum = 1; 

    l_blob_len := DBMS_LOB.getlength(l_blob); 

    -- Open the destination file. 
    l_file := UTL_FILE.fopen(<location>,<filename>,'wb', 32767); 

    WHILE l_pos < l_blob_len LOOP 
    DBMS_LOB.read(l_blob, l_amount, l_pos, l_buffer); 
    UTL_FILE.put_raw(l_file, l_buffer, TRUE); 
    l_pos := l_pos + l_amount; 
    END LOOP; 

    -- Close the file. 
    UTL_FILE.fclose(l_file); 

END; 
/
+5

के बाद से इन फ़ाइलों को आप 'उपयोग करने के लिए wb' (लिखने बाइट मोड) के लिए कर सकते हैं के बजाय 'डब्ल्यू '(पाठ लिखें)। –

+4

@ जेनियरल्स: अच्छी तरह से देखा गया। मैंने जवाब अपडेट किया है .. – StevieG

+2

मेरा मानना ​​है कि अगर मैं बाहर जाता हूं तो rownum = 1 यह क्षेत्र से सभी बीएलओबी लिखता है। उस स्थिति में, मैं फ़ाइल नाम गतिशील कैसे बना सकता हूं यानी इसे फ़ाइल नाम के रूप में कुछ अन्य डेटाबेस फ़ील्ड का उपयोग कर सकता हूं? इसके अलावा, क्या यह पीडीएफ लिख सकता है जिसमें गैर-पाठ सामग्री जैसे छवियां हैं? – tumchaaditya

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