Clob列から特定の文字列を取得する方法は?
product_details
という名前のclob列に保存されている以下のデータがあります
CALCULATION=[N]NEW.PRODUCT_NO=[T9856]
OLD.PRODUCT_NO=[T9852].... -- with other text
列NEW.PRODUCT_NO
から文字列product_details
を検索したい
私は
select * from my_table
where dbms_lob.instr(product_details,'NEW.PRODUCT_NO')>=1
上記は私のテーブルから全文を取得します。
どんな助けも高く評価されます。
よろしく
通常のInStrおよびSubstStr関数と同様に、 dbms_lob.instr および dbms_lob.substr を使用します。
簡単な例を見てください:
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
oK、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;
select *
from TABLE_NAME
where dbms_lob.instr(COLUMNNAME,'searchtext') > 0;