简体   繁体   English

如何使用INSTR函数处理数据类型为CLOB的列中的数据

[英]how to use INSTR function to data present in column with data type as CLOB

I have a table(table_clob) which has follwing field 我有一个表(table_clob)具有以下字段

create table table_clob ( file_data CLOB); 

above table has only one row . 上表只有一行。 file_data has following data: file_data具有以下数据:

"A00",399,"yhnj",20150302,055522,100215 
"E51",987456111,147852,10000,"bnncnf","abc","I","XYZ","EA","PO16", Z99,3 
"E51",985856111,147852,10000,"wertt","tgb","I","XYZ","EA","PO16","7GZ",29 
"E51",456987123,"469555",155000,"reeggdd","edc","D","ABC","EM","GU16","7HF" 52 
"E51",456456852,125500,468566,"wsxcde","BUS","I","ABC","SE","MT12","8JG",18 
"E51",987456111,147852,10000,"pokmhj","BUS","I","XYZ","EA","PO16","7GZ",

i have insert above data into a table(including column names and types) . 我已经将上述数据插入到表中(包括列名和类型)。 i don't want to insert row starting with 'AOO' and 'Z99' ; 我不想插入以'AOO'和'Z99'开头的行; after inserting into a table .It should have 6 rows and should look like: 插入表格后,它应该有6行,看起来应该像这样:

"E51",987456111,147852,10000,"bnncnf","abc","I","XYZ","EA","PO16", "E51",985856111,147852,10000,"ABC Power Station","BUS","I","XYZ","EA","PO16","7GZ",29 "E51",985856111,147852,10000,"wertt","tgb","I","XYZ","EA","PO16","7GZ",29 
"E51",456987123,"469555",155000,"reeggdd","edc","D","ABC","EM","GU16","7HF",52 
"E51",456456852,125500,468566,"wsxcde","yhn","I","ABC","SE","MT12","8JG",18 
"E51",987456111,147852,10000,"pokmhj","tgb","I","XYZ","EA","PO16","7GZ",

can anyone help me to get above result 谁能帮助我取得超越结果

You can use dbms_log.instr packaged function to do this , check the following: 您可以使用dbms_log.instr打包函数来执行此操作,请检查以下内容:

select file_data from table_clob
   where dbms_lob.instr(file_data,'AOO')=0 
         or dbms_lob.instr(file_data,'Z99')=0 ;

This query divides clob into individual lines: 此查询将clob分为几行:

select 
    substr(file_data, instr(file_data, '"E51"', 1, level), 
    decode(instr(file_data, '"E51"', 1, level + 1), 0, length(file_data), 
      instr(file_data, '"E51"', 1, level + 1) - instr(file_data, '"E51"', 1, level)-1)
    ) data
  from table_clob
  connect by instr(file_data, '"E51"', 1, level) > 0

Output: 输出:

DATA                                                                           
--------------------------------------------------------------------------------
"E51",987456111,147852,10000,"bnncnf","abc","I","XYZ","EA","PO16", Z99,3         
"E51",985856111,147852,10000,"wertt","tgb","I","XYZ","EA","PO16","7GZ",29        
"E51",456987123,"469555",155000,"reeggdd","edc","D","ABC","EM","GU16","7HF",52   
"E51",456456852,125500,468566,"wsxcde","BUS","I","ABC","SE","MT12","8JG",18      
"E51",987456111,147852,10000,"pokmhj","BUS","I","XYZ","EA","PO16","7GZ"  

Eliminate unwanted rows for instance where data not like 'Z99' and insert into table like here: 消除不必要的行,例如where data not like 'Z99'并插入到表中,如下所示:

insert into table_clob (file_data) 
select data from
  (select 
      substr(file_data, instr(file_data, '"E51"', 1, level), 
      decode(instr(file_data, '"E51"', 1, level + 1), 0, length(file_data), 
        instr(file_data, '"E51"', 1, level + 1) - instr(file_data, '"E51"', 1, level)-1)
      ) data
    from table_clob
    connect by instr(file_data, '"E51"', 1, level) > 0)
  where data not like 'Z99'

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM