Tengo la tarea de evaluar una condición lógica del tipo:
Código:
('PLATÓN'='FILÓSOFO') OR (3 <> 5) AND NOT (2/3/2004 < 1/1/2005) ...
Para ello, he escrito la sig. rútina:
Código SQL
[-]
FUNCTION Fu_Evalua_Condicion(p_condicion IN VARCHAR2) RETURN BOOLEAN IS
-- Evalua la condición pasada como parámetro
vSQL VARCHAR2(300);
vDummy VARCHAR2(1);
BEGIN
vSQL := 'SELECT ''X'' FROM DUAL WHERE ' || p_condicion;
BEGIN
EXECUTE IMMEDIATE vSQL INTO vDummy;
If vDummy = 'X' Then
RETURN TRUE;
Else
RETURN FALSE;
End If;
EXCEPTION
WHEN OTHERS THEN RETURN FALSE;
END;
END Fu_Evalua_Condicion;
¿Cabe una mejor solución? El rendimiento es crítico porque esta rútina será llamada muchas veces, pero no se me ocurre otra manera.
Agradezco de antemano cualquier comentario que hagaís.