Mi pregunta es: En Oracle regexp_like funciona solo en la cláusula where sin tener que comparar con 1 o 0 o una cadena. La función solo se puede invocar cuando se evalúa algo en una sentencia case o en la cláusula where. Como no se puede describir (intenté buscar en el diccionario de datos), me pregunto cómo escribir una función que funcione de la misma manera.¿Cómo escribir una función que solo se usa en la cláusula where que se evalúa como verdadera sin un operador de comparación?
Por ejemplo:
function is_prod
returns boolean
is
l_var boolean := false;
begin
if sys_context('userenv','db_unique_name') = '"PROD_SERVER"' then
l_var := true;
end if;
return l_var;
end;
Esa función compila, pero no se puede utilizar en una instrucción SQL como la siguiente:
select *
from table t
where is_prod
Porque me sale el siguiente error: ORA-00920: operador relacional inválido.
Compararlo con un número o verdadero tampoco funciona.
¿Dónde puedo encontrar el código base para regexp_like o qué debo hacer para que funcione como regexp_like?
Nota: He mirado alrededor durante varias horas y he descubierto que las funciones de expresiones regulares de Oracle son en realidad llamadas Java, pero eso significa que todavía necesitan un contenedor pl/sql.
+1 Estaría muy interesado en ver la respuesta a esto, pero al mismo tiempo tengo que preguntarme en qué momento el tiempo dedicado a resolver este problema supera el tiempo dedicado a escribir "= 1". Espero que la respuesta esté en unos 10 años. – GarethD
@GarethD Sí, me he preguntado lo mismo. Me encantaría ver PL/SQL actuar más como un lenguaje orientado a objetos que un lenguaje de procedimientos :) Y, sabemos que se puede hacer debido al ejemplo que dio ('regexp_like') puede hacerlo. – kentcdodds
'REGEXP_LIKE' es una [condición] (http://docs.oracle.com/cd/E14072_01/server.112/e10592/conditions.htm), no una función. –