Comment puis-je tester si une colonne égale clob() vide dans Oracle?
4 réponses
si vous essayez de faire la comparaison dans PL / SQL, vous pouvez juste tester l'égalité comme la solution D'Igor le fait
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.
si vous essayez de faire cela en SQL, thougyh, vous devez utiliser le DBMS_LOB.Comparer la fonction. Une colonne de LOB dans une table est en fait un localisateur de LOB (i.e. pointeur), donc ce qui vous intéresse vraiment c'est que la valeur pointée par le LOB est comparable à la valeur pointée par le Localisateur de LOB retourné par la fonction 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
voulez-vous juste vérifier un sabot qui n'a pas de longueur? Bien que pas exactement ce que votre demande, c'est fondamentalement la même chose?
select *
from bar
where dbms_lob.getlength(foo) = 0;
Voici le test complet:
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
--------------------------------------------------------------------------------
quelque chose comme cela devrait fonctionner pour l'initialisation:
DECLARE
dummy clob;
dummy2 clob;
BEGIN
dummy := empty_clob();
IF dummy = empty_clob() THEN
dummy2 := dummy;
END IF;
END;
une façon simple de tester les sabots vides dans SQLplus est de convertir tous les sabots en varchar2 (en utilisant la fonction TO_CHAR) avant d'effectuer le test:
SELECT *
FROM table1
WHERE TO_CHAR(table1.column1) IS NULL