2016-04-13 2 views
0

Как я могу запросить таблицу для столбца типа clob? Мне нужно запросить таблицу для столбца для определенной строки (в дополнение к другим условиям - мне может потребоваться использовать оператор Case), моя первоначальная идея заключалась в том, чтобы запрашивать данные в подзапросе, а затем найти совпадение с помощью Case in верхний запрос. однако я сейчас застрял, так как не уверен, как запрашивать данные типа clob в Select!Запрос типа Oracle Clob datatype

Редактировать: столбец clob в таблице представляет собой набор абзацев, а строка, которую я пытаюсь найти, может находиться в любом месте в абзаце. И я не уверен в размерах клоа.

+0

Длина клоа: Выберите длину (... clob expr ...) from .... – mathguy

ответ

0

Надежда это примеры наглядно иллюстрирует то, что я я пытаюсь объяснить.

SET SQLBL ON; 
SET DEFINE OFF; 

CREATE TABLE CLOB_TEST 
(
clob_in CLOB 
); 

INSERT 
INTO CLOB_TEST VALUES 
    (
    'I am working as a DBA and senior database resource in L&T Infotech in Pune India' 
); 


SELECT DBMS_LOB.SUBSTR(CLOB_IN,3000) ot FROM CLOB_TEST; 

-----------------------------OUTPUT------------------------------------------ 

OT 
I am working as a DBA and senior database resource in L&T Infotech in Pune India 

-----------------------------OUTPUT------------------------------------------ 
+0

Я получаю сообщение об ошибке, когда я пытаюсь это сделать: ORA-06502: PL/SQL: числовая или значение ошибки: буфер символьной строки слишком мал – Skn

0

Во многом так же, как «запрос столбца» (нечетная терминология!) Типа varchar2.

структура таблицы:

SQL> describe t 
Name      Null? Type 
------------------------- -------- -------------------------------------------- 
COL1        VARCHAR2(20) 
COL2        CLOB 

содержимое таблицы:

SQL> select * from t; 

COL1     COL2 
-------------------- ------------------------------------------------------- 
abc     afdreed 
azx;     ffare21 

запроса таблица (где положение на колонке CLOB):

SQL> select * from t where col2 like '%dre%'; 

COL1     COL2 
-------------------- ----------------------------------------------------------- 
abc     afdreed 
+0

Я не уверен, полностью ли вы прочитали мой вопрос. Мне нужно указать столбец отдельно в моей инструкции select, и я не могу этого сделать. – Skn

+0

Не понимаю. В моей инструкции select я указывал col2 отдельно, который является столбцом типа данных CLOB. Возможно, вы можете привести пример того, что вы пытаетесь сделать и не работает? – mathguy

+0

Я пытаюсь что-то вроде этого: select case, когда col2 нравится «% abc%», а затем ABC (выберите col2 из t, где .......) это помогает? это связано с тем, что мне сначала нужно запросить подмножество данных, а затем отобразить их на основе этого случая. – Skn

0

Я хотел бы предложить вам взглянуть на пакет DBMS_LOB (link). Она имеет некоторые функции, полезные для работы с LOB

, например:

  • Substr - Функция возвращает сумму байты или символы из LOB, начиная с абсолютным смещением от начала LOB.
  • Insrt - Эта функция возвращает совпадающее положение n-го вхождения шаблона в LOB, начиная с указанного вами смещения.
  • GetLength - Эта функция получает длину указанного большого объекта. Возвращается длина в байтах или символах.
  • Trim - Эта процедура обрезает значение внутреннего LOB с длиной, указанной вами в параметре newlen. Укажите длину в байтах для BLOB и укажите длину символов для CLOB.

Также вы можете попробовать работать со строковыми функциями. Некоторые из них могут работать с огромными файлами lob.

Смежные вопросы