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

पंक्ति 191 पर त्रुटि:ORA-01489:स्ट्रिंग संयोजन का परिणाम बहुत लंबा है

VARCHAR2 4000 बाइट्स तक सीमित है। अगर आपको यह त्रुटि मिलती है

तब यह बहुत स्पष्ट है कि संयोजन 4000 बाइट्स से अधिक है।

अब क्या करें ?

इसके बजाय CLOB का उपयोग करने का आपका पहला समाधान सही है।

select TO_CLOB(a)|| TO_CLOB(b)|| TO_CLOB(c) || TO_CLOB(d) 

ऐसा लगता है कि आपकी वास्तविक समस्या फ़ाइल में सहेजी जा रही है

जबकि आपने पोस्ट नहीं किया कि परिणामी क्लॉब को फ़ाइल में कैसे सहेजना है, मेरा मानना ​​​​है कि आप इसे सही तरीके से नहीं कर रहे हैं। यदि आप फ़ाइल को उसी तरह सहेजने का प्रयास करते हैं जैसे आप VARCHAR2 के साथ कर रहे थे, तो आप इसे गलत कर रहे हैं।

आपको सबसे पहले dbms_lob.read use का उपयोग करना होगा डेटाबेस से क्लॉब पढ़ने के लिए, फिर utl_file.put_raw . का उपयोग करें फ़ाइल में लिखने के लिए।

DECLARE
    position NUMBER := 1;
    byte_length NUMBER := 32760;
    length NUMBER;
    vblob BLOB;
    rawlob RAW(32760);
    temp NUMBER;
    output utl_file.file_type;
BEGIN
    -- Last parameter is maximum number of bytes returned.
    -- wb stands for write byte mode
    output := utl_file.fopen('DIR', 'filename', 'wb', 32760);

    position := 1;
    select dbms_lob.getlength(yourLob)
    into len
    from somewhere
    where something;

    temp := length;

    select yourLob
    into vlob
    from somewhere
    where something;

    IF len < 32760 THEN
        utl_file.put_raw(output, vblob);
        -- Don't forget to flush
        utl_file.fflush(output);
    ELSE -- write part by part
        WHILE position < len AND byte_length > 0
        LOOP
           dbms_lob.read(vblob, byte_length, position, rawlob);

           utl_file.put_raw(output,rawlob);

           -- You must admit, you would have forgot to flush.
           utl_file.fflush(output); 

           position := position + byte_length;

           -- set the end position if less than 32000 bytes
           temp := temp - bytelen;
           IF temp < 32760 THEN
               byte_length := temp;
           END IF;
    END IF;
END;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. गणना इनपुट और आउटपुट DBMS_OUTPUT के साथ PL/SQL में लर्निंग बाइंड वेरिएबल्स।PUT_LINE

  2. Oracle में तालिका पंक्ति के लिए बनाया गया दिनांक-समय क्या है?

  3. मौजूदा टेबल Oracle पर इंडेक्स बनाएं

  4. लंबे समय तक चलने वाले प्रश्नों के लिए Oracle डेटाबेस की जाँच कैसे करें

  5. Oracle में दिए गए प्रारूप में समय अंतर को परिवर्तित करना