Если вы пытаетесь провести сравнение в PL / SQL, вы можете просто проверить равенство, как это делает решение Игоря
SQL> ed
Wrote file afiedt.buf
1 DECLARE
2 dummy clob;
3 BEGIN
4 dummy := empty_clob();
5 IF dummy = empty_clob() THEN
6 dbms_output.put_line( 'Dummy is empty' );
7 ELSE
8 dbms_output.put_line( 'Dummy is not empty' );
9 END IF;
10* END;
SQL> /
Dummy is empty
PL/SQL procedure successfully completed.
Если вы пытаетесь сделать это в SQL, то вам нужно использовать функцию DBMS_LOB.COMPARE. Столбец LOB в таблице на самом деле является локатором (то есть указателем) LOB, так что вам действительно важно, чтобы значение, на которое указывает LOB, было сопоставимо со значением, на которое указывает локатор LOB, возвращаемый функцией EMPTY_CLOB ().
SQL> desc bar
Name Null? Type
----------------------------------------- -------- ------------------------
FOO CLOB
SQL> insert into bar values ('123');
1 row created.
SQL> insert into bar values( empty_clob() );
1 row created.
SQL> insert into bar values( empty_clob() );
1 row created.
SQL> ed
Wrote file afiedt.buf
1 select count(*)
2 from bar
3* where dbms_lob.compare( foo, empty_clob() ) = 0
SQL> /
COUNT(*)
----------
2
SQL> ed
Wrote file afiedt.buf
1 select count(*)
2 from bar
3* where dbms_lob.compare( foo, empty_clob() ) != 0
SQL> /
COUNT(*)
----------
1