Intereting Posts
Вставка в таблицу из другого с разными столбцами count (MySql) относится к типу, который недопустим для использования в качестве ключевого столбца в индексе Как написать ограничение относительно максимального количества строк в postgresql? Расстояние Хэмминга в бинарных строках в SQL Выберите несколько столбцов (неагрегатная функция) с помощью GROUP BY Как я могу объединить две таблицы MySQL? выбрать для обновления с помощью различных mysql Удалите записи из таблицы, где <максимальное число для поля и максимальное число Является ли LinqToSQL достаточно мощным? Не является ли более мощный, но столь же удобный интерфейс, который легко построить? Извлечь записи из одной таблицы, где нет записи в другой Как я могу проверить свой веб-сайт на атаки SQL-инъекций? Уникальное ключевое слово vs Distinct в Oracle COPY с динамическим именем файла как просмотреть базу данных PostgreSQL в Windows 7? ASP.NET Заполнение списка без обратной передачи

Как запросить столбец CLOB в Oracle

Я пытаюсь запустить запрос с несколькими столбцами, которые являются типами данных CLOB. Если я запускаю запрос как обычный, все эти поля имеют (CLOB) как значение.

Я попытался использовать DBMS_LOB.substr(column ), и я получу ошибку

 ORA-06502: PL/SQL: numeric or value error: character string buffer too small 

Как я могу запросить столбец CLOB?

При получении подстроки столбца CLOB и использовании инструмента запроса с ограничениями размера / буфера иногда вам нужно установить BUFFER в большем размере. Например, при использовании SQL Plus используйте SET BUFFER 10000 чтобы установить его на 10000, поскольку по умолчанию 4000.

DBMS_LOB.substr команду DBMS_LOB.substr вы также можете указать количество символов, которые хотите вернуть, и смещение, от которого. Поэтому использование DBMS_LOB.substr(column, 3000) может ограничить его достаточным количеством для буфера.

См. Документацию оракула для получения дополнительной информации о команде substr


     DBMS_LOB.SUBSTR (
        lob_loc В CLOB CHARACTER SET ANY_CS,
        количество IN INTEGER: = 32767,
        offset IN INTEGER: = 1)
       RETURN VARCHAR2 CHARACTER SET lob_loc% CHARSET;

Это работает

 select DBMS_LOB.substr(myColumn, 3000) from myTable 

Я столкнулся с другим условием с HugeClob в моей базе данных Oracle. В dbms_lob.substr допустимо значение 4000 в функции, например:

 dbms_lob.substr(column,4000,1) 

поэтому для моего HughClob, который был больше, мне пришлось использовать два вызова в select :

 select dbms_lob.substr(column,4000,1) part1, dbms_lob.substr(column,4000,4001) part2 from ..... 

Я звонил из приложения Java, поэтому просто конкатенировал part1 и part2 и отправлял его по электронной почте.

Также можно использовать большие CLOB-выбор:

SELECT dbms_lob.substr( column_name, dbms_lob.getlength(column_name), 1) FROM foo

Если вы используете SQL * Plus, попробуйте следующее …

 set long 8000 select ... 

Другой вариант – создать функцию и вызвать эту функцию каждый раз, когда вам нужно выбрать столбец clob.

 create or replace function clob_to_char_func (clob_column in CLOB, for_how_many_bytes in NUMBER, from_which_byte in NUMBER) return VARCHAR2 is begin Return substrb(dbms_lob.substr(clob_column ,for_how_many_bytes ,from_which_byte) ,1 ,for_how_many_bytes); end; 

и вызовите эту функцию как;

 SELECT tocharvalue, clob_to_char_func(tocharvalue, 1, 9999) FROM (SELECT clob_column AS tocharvalue FROM table_name); 

Чтобы добавить к ответу.

 declare v_result clob; begin ---- some operation on v_result dbms_lob.substr( v_result, 4000 ,length(v_result) - 3999 ); end; / 

В dbms_lob.substr

first parameter – это clob который вы хотите извлечь.

Second parameter – сколько длины клоба вы хотите извлечь.

Third parameter – это слово, которое вы хотите извлечь.

В приведенном выше примере я знаю, что размер моего клона больше 50000, поэтому мне нужен последний 4000 символов.