[英]Querying oracle clob column
我有一張帶有clob柱的桌子。 需要執行基於clob列內容的搜索。 然而
select * from aTable where aClobColumn = 'value';
但失敗了
select * from aTable where aClobColumn like 'value';
似乎工作很精細。 oracle如何處理clob列上的過濾。 它是否只支持'like'子句而不支持=,!=等。它與其他數據庫如mysql,postgres等是否相同
另外,在實現JPA的框架中如何處理這種情況,如hibernate?
是的,當嘗試比較兩個CLOB
列或CLOB
列和一個CLOB
列時,不允許(此限制不影響CLOB
在PL / SQL中的比較)在SQL語句中使用比較運算符,如=
, !=
, <>
等字符文字,就像你一樣。 為了能夠在SQL語句中進行這樣的比較,可以使用dbms_lob.compare()函數。
select *
from aTable
where dbms_lob.compare(aClobColumn, 'value') = 0
在上面的查詢中, 'value'
文字將被隱式轉換為CLOB
數據類型。 為避免隱式轉換,可以使用TO_CLOB()
函數將'value'
文字顯式轉換為CLOB
數據類型,然后傳入compare()
函數:
select *
from aTable
where dbms_lob.compare(aClobColumn, to_clob('value')) = 0
怎么樣
select * from table_name where to_char(clob_column) ="test_string"
Clob是可以存儲海量數據的大型數據類型,因此許多支持varchar操作的運算符不能用於Clob,但是在PL / SQL中,其中一些類似於這里提到的: http : //docs.oracle.com/cd/B19306_01/ appdev.102 / b14249 / adlob_sql_semantics.htm#g1016221
正如你可以看到表Like
在SQL和為CLOB的PL / SQL的支持,但是=
未包含在SQL支持,但在PL / SQL
如果你真的需要,你可以轉換成SQL為varchar和比較像湯姆凱特提到這里是這樣的: http://sqlfiddle.com/#!4/1878f6/1
select * from aTable where dbms_lob.substr( aClobColumn , length(aClobColumn), 1 )='value';
所以不要。 因為如果你想比較數據 - 那么它可能是一個值: NULL
和第二個EMPTY_CLOB
並且它對於這個方法不同的事情! 它返回-1,盡管就數據而言 - 兩個值都不應該包含。 這是正確的:
dbms_lob.compare (NVL (AUDIT_PAYLOAD_TEXT_DEC, Empty_Clob ()), NVL (AUDIT_PAYLOAD_TEXT, Empty_Clob ()))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.