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 за да прочетете clob от базата данни, след това използвайте 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. Последна дума в изречение:В SQL (възможни са регулярни изрази?)

  2. как да върна динамичен набор от резултати във функцията на Oracle

  3. Как да изразите сериализуем тип Blob във файл за картографиране на хибернация

  4. Кои са най-добрите решения за известни проблеми с валидирането на схемата на Hibernate на колони с плаваща запетая при използване на Oracle 10g?

  5. плащане distrubution oracle sql заявка