Как проверить, равен ли столбец пустому clob() в Oracle?
наивный FOO = empty_clob()
жалуется на несовместимые типы. Я попытался погуглить, но (еще раз) не имел большого успеха в поисках помощи с Oracle. Спасибо.
4 ответов
Если вы пытаетесь сделать сравнение в 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, thougyh, вам нужно использовать DBMS_LOB.Сравните функцию. Столбец 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
вы просто хотите проверить, есть ли клоб, который не имеет никакой длины? Пока не совсем то, что вы просите, это в основном то же самое?
select *
from bar
where dbms_lob.getlength(foo) = 0;
вот полный тест:
SQL> create table bar (foo clob);
Table created.
SQL> insert into bar values (empty_clob());
1 row created.
SQL> select *
2 from bar
3 where dbms_lob.getlength(foo) = 0;
FOO
--------------------------------------------------------------------------------
что-то вроде это должно работать для инициализации:
DECLARE
dummy clob;
dummy2 clob;
BEGIN
dummy := empty_clob();
IF dummy = empty_clob() THEN
dummy2 := dummy;
END IF;
END;
простой способ проверить пустые клобы в SQLplus-преобразовать все КЛОБЫ в varchar2 (используя функцию TO_CHAR) перед выполнением теста:
SELECT *
FROM table1
WHERE TO_CHAR(table1.column1) IS NULL