Comment puis-je tester si une colonne est égale à EMPTY_CLOB () dans Oracle?
Question
Le FOO = empty_clob()
naïf se plaint de types incompatibles. J'ai essayé googler, mais (encore une fois) a eu peu de succès la recherche d'aide avec Oracle. Merci.
La solution
Si vous essayez de faire la comparaison en PL / SQL, vous pouvez tester l'égalité en tant que solution d'Igor 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 le faire dans SQL, thougyh, vous devez utiliser la fonction DBMS_LOB.COMPARE. Une colonne LOB dans une table est vraiment un LOB (c.-à-pointeur), donc ce que vous tenez vraiment à est que la valeur pointée par le LOB est comparable à la valeur pointée par le 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
Autres conseils
Êtes-vous simplement vouloir vérifier un CLOB qui n'a pas de longueur? Bien que pas exactement ce que votre demande, il 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 CLOBs vides dans SQLplus est de convertir tous les CLOBS à varchar2 (en utilisant la fonction TO_CHAR) avant d'effectuer le test:
SELECT *
FROM table1
WHERE TO_CHAR(table1.column1) IS NULL