La Web del Programador: Comunidad de Programadores
 
    Pregunta:  26532 - PROBLEMA CON EL TIPO LONG DE ORACLE EN ACCESS
Autor:  Hector Barron
Estoy realizando consultas Access pass-througth de una base de datos Oracle 8.i.
Necesito tomar una subcadena de un campo de tipo Long (Este tipo es propio de Oracle).
Pero no existe una funcion para tomar subcadenas de Long y las funciones como substr no pueden accesar este tipo de Datos.
Como puedo realizar este tipo de consultas??

  Respuesta:  Werner Garcia
Como los LONGS y BLOBS no pueden usarse adentro de las funciones, hay que convertir estos campos a VARCHAR o VARCHAR2, pero VARCHAR2 solo soporta 4000 caracteres.

Yo hice un procedimiento llamado "to_string" que convierte los primeros 4000 caracteres de un LONG a VARCHAR2.

Por ejemplo, si quiero obtener el titulo de una noticia solo si el cuerpo contiene la palabra 'computadora', llamo al procedimiento de esta forma:

select titulo
from noticias
where
to_string(codigonoticia) like '%computadora';

El parametro es el codigo unico de la noticia. La estructura de mi tabla noticias es como sigue:

codigonoticia number(10)
titulo varchar2(100)
cuerpo long

este procedimiento tiene que crearse en Oracle

-------------------- cortar aqui ----------------------------

FUNCTION to_string(cod IN NUMBER) RETURN VARCHAR2 IS
v_cuerpo VARCHAR2(4000);
l_cuerpo LONG;
BEGIN
SELECT cuerponoticia INTO l_cuerpo
FROM noticias
WHERE codigonoticia = cod;
v_cuerpo := SUBSTR(l_cuerpo, 1, 4000);
RETURN(v_cuerpo);
END;