【问题标题】:Search for a particular string in Oracle clob column在 Oracle clob 列中搜索特定字符串
【发布时间】:2013-07-13 00:12:44
【问题描述】:

如何从 clob 列中获取特定的字符串?

我有如下数据,这些数据存储在名为 product_details 的 clob 列中

CALCULATION=[N]NEW.PRODUCT_NO=[T9856] 
OLD.PRODUCT_NO=[T9852].... -- with other text

我想从product_details列中搜索字符串NEW.PRODUCT_NO

我试过了

select * from my_table
where dbms_lob.instr(product_details,'NEW.PRODUCT_NO')>=1

以上内容从我的表格中获取全文。

任何帮助都是非常值得赞赏的。

问候

【问题讨论】:

  • 您只想在输出中包含 product_details 的子字符串(一行),例如“CALCULATION=[N]NEW.PRODUCT_NO=[T9856]”?
  • @FlorinGhita 是的,我只想要字符串 NEW.PRODUCT_NO= 作为 clob 列的输出。

标签: sql oracle oracle10g clob


【解决方案1】:

您可以使用@Florin Ghita 建议的方式。 但请记住 dbms_lob.substr 在函数中限制为 4000 个字符 例如:

dbms_lob.substr(clob_value_column,4000,1)

否则你会发现 ORA-22835(缓冲区太小)

你也可以使用其他sql方式:

SELECT * FROM   your_table WHERE  clob_value_column LIKE '%your string%';

注意: 上述两种方式都存在性能问题,例如导致全表扫描,因此请同时考虑 Oracle 文本索引:

https://docs.oracle.com/en/database/oracle/oracle-database/12.2/ccapp/indexing-with-oracle-text.html

【讨论】:

    【解决方案2】:

    以下代码可用于在 Oracle clob 列中搜索特定字符串

    select *  
    from RLOS_BINARY_BP
    where dbms_lob.instr(DED_ENQ_XML,'2003960067') > 0;
    

    其中RLOS_BINARY_BP是表名,DED_ENQ_XML是Oracle数据库的列名(数据类型为CLOB)。

    【讨论】:

      【解决方案3】:

      您可以将您的 CLOB 值转换为 VARCHAR 值并使您的查询像一个

      【讨论】:

        【解决方案4】:
        select *  
        from TABLE_NAME
        where dbms_lob.instr(COLUMNNAME,'searchtext') > 0;
        

        【讨论】:

          【解决方案5】:

          好的,您可以使用与 instr 相关的 substr 来查找字符串的起始位置

          select 
            dbms_lob.substr(
                 product_details, 
                 length('NEW.PRODUCT_NO'), --amount
                 dbms_lob.instr(product_details,'NEW.PRODUCT_NO') --offset
                 ) 
          from my_table
          where dbms_lob.instr(product_details,'NEW.PRODUCT_NO')>=1;
          

          【讨论】:

            【解决方案6】:

            使用 dbms_lob.instrdbms_lob.substr,就像常规的 InStr 和 SubstStr 函数一样。
            看简单的例子:

            SQL> create table t_clob(
              2    id number,
              3    cl clob
              4  );
            
            Tabela zosta│a utworzona.
            
            SQL> insert into t_clob values ( 1, ' xxxx abcd xyz qwerty 354657 [] ' );
            
            1 wiersz zosta│ utworzony.
            
            SQL> declare
              2    i number;
              3  begin
              4    for i in 1..400 loop
              5        update t_clob set cl = cl || ' xxxx abcd xyz qwerty 354657 [] ';
              6    end loop;
              7    update t_clob set cl = cl || ' CALCULATION=[N]NEW.PRODUCT_NO=[T9856] OLD.PRODUCT_NO=[T9852].... -- with other text ';
              8    for i in 1..400 loop
              9        update t_clob set cl = cl || ' xxxx abcd xyz qwerty 354657 [] ';
             10    end loop;
             11  end;
             12  /
            
            Procedura PL/SQL zosta│a zako˝czona pomyťlnie.
            
            SQL> commit;
            
            Zatwierdzanie zosta│o uko˝czone.
            SQL> select length( cl ) from t_clob;
            
            LENGTH(CL)
            ----------
                 25717
            
            SQL> select dbms_lob.instr( cl, 'NEW.PRODUCT_NO=[' ) from t_clob;
            
            DBMS_LOB.INSTR(CL,'NEW.PRODUCT_NO=[')
            -------------------------------------
                                            12849
            
            SQL> select dbms_lob.substr( cl, 5,dbms_lob.instr( cl, 'NEW.PRODUCT_NO=[' ) + length( 'NEW.PRODUCT_NO=[') ) new_product
              2  from t_clob;
            
            NEW_PRODUCT
            --------------------------------------------------------------------------------
            T9856
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2017-05-26
              • 2015-12-04
              • 1970-01-01
              • 2020-09-29
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多