leer - long oracle
¿Cómo pruebo si una columna es igual a empty_clob() en Oracle? (4)
El ingenuo FOO = empty_clob()
queja de tipos incompatibles. Probé con Google, pero (una vez más) tuve poco éxito en la búsqueda de ayuda con Oracle. Gracias.
¿Solo quieres comprobar si hay un CLOB que no tiene ninguna longitud? Si bien no es exactamente lo que preguntas, ¿es básicamente lo mismo?
select *
from bar
where dbms_lob.getlength(foo) = 0;
Aquí está la prueba completa:
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
--------------------------------------------------------------------------------
Si está tratando de hacer la comparación en PL / SQL, puede simplemente probar la igualdad como lo hace la solución de Igor
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 está intentando hacer esto en SQL, sin embargo, necesita usar la función DBMS_LOB.COMPARE. Una columna LOB en una tabla es realmente un localizador LOB (es decir, un puntero), entonces lo que realmente importa es que el valor apuntado por el LOB sea comparable al valor apuntado por el localizador LOB devuelto por la función 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
algo como esto debería funcionar para la inicialización:
DECLARE
dummy clob;
dummy2 clob;
BEGIN
dummy := empty_clob();
IF dummy = empty_clob() THEN
dummy2 := dummy;
END IF;
END;
Una forma sencilla de probar si hay vacíos en SQLplus es convertir todos los CLOB a varchar2 (usando la función TO_CHAR) antes de realizar la prueba:
SELECT *
FROM table1
WHERE TO_CHAR(table1.column1) IS NULL