Oracle NCLOB Проблема - PullRequest
       10

Oracle NCLOB Проблема

1 голос
/ 26 июля 2010

У меня есть следующая функция:

CREATE OR REPLACE FUNCTION GetVarchar2 (iclCLOB IN Nvarchar2)
return NVARCHAR2
IS
cnuMAX_LENGTH Constant number := 32767 ;
nuLength Number := DBMS_LOB.getlength(iclCLOB);
sbBuffer Nvarchar2(32767);
begin
dbms_lob.read(iclCLOB,nuLength,1,sbBuffer);
return sbBuffer;
END;

, когда я вызываю это так:

select GetVarChar2(text) from posts where postid = 'anId';

Я получаю эту ошибку:

ORA-22835: буфер слишком мал для преобразования CLOB в CHAR или BLOB в RAW (фактическое значение: 6058, максимум: 2000)
22835. 00000 - "буфер слишком мал для преобразования CLOB в CHAR или BLOB в RAW (фактическое значение:% s, максимум:% s) "* ​​1011 * * Причина: была предпринята попытка преобразовать CLOB в CHAR или BLOB в RAW, где
размер LOB был больше, чем ограничение буфера для типов CHAR и RAW
.
Обратите внимание, что значения ширины указываются в символах, если для столбца действует семантика длины символа, в противном случае значения ширины указываются в байтах.
* Действие: Выполните одно из следующих действий
1. Уменьшите LOB перед выполнением преобразования,
например, используя SUBSTR для CLOB
2. Используйте DBMS_LOB.SUBSTR для преобразования CLOB в CHAR или BLOB в RAW.

Проблема в том, что размер текста в таблице сообщений типа NCLOB составляет 6059 байт.Это странно, потому что, когда я делаю это без вызова функции, она работает хорошо.т.е. когда я запускаю следующий скрипт:

declare 
    iclCLOB nvarchar2(6100) := 'Here is the same 6059 bytes string';
    cnuMAX_LENGTH number := 32767 ;
    nuLength Number := DBMS_LOB.getlength(iclCLOB);
    sbBuffer Nvarchar2(32767);
    sbBuffer1 Nvarchar2(32767);
begin
    dbms_lob.read(iclCLOB,nuLength,1,sbBuffer);
    select GetVarChar2(text) into sbBuffer1 from posts where postid = 'anId';
end;

Он запускается без проблем.

Спасибо.

1 Ответ

2 голосов
/ 29 июля 2010

NVARCHAR2 может быть 32767 байтов в PL / SQL, но только 4000 байтов в SQL.Также попробуйте изменить параметр iclCLOB на NCLOB вместо NVARCHAR2 - неявное преобразование вызовет проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...