Supongamos que tengo una variable BOOLEAN
dentro de un bloque PL/SQL en un Formulario de Oracle:Evaluación de las variables booleanas PL/SQL en Oracle Forms
DECLARE
is_viewable BOOLEAN;
BEGIN
is_viewable := ...;
IF NOT is_viewable THEN
raise_my_error(); // pseudo-code
END IF;
END;
Después de pasar a través de este código varias veces con un depurador, tengo determinó que raise_my_error()
nunca se llama. Para aclarar:
raise_my_error()
hace no se llama si seis_viewable = TRUE
raise_my_error()
hace no se llama si seis_viewable = FALSE
Las pruebas iniciales sugieren que este comportamiento se limita a PL código se ejecute/SQL dentro de Oracle Forms y no el código PL/SQL ejecutado directamente dentro de la base de datos (aunque podría estar equivocado).
puedo evitar esto mediante la comparación explícita is_viewable
a FALSE
:
IF is_viewable = FALSE THEN
raise_my_error();
END IF;
todavía estoy curioso por qué NOT is_viewable
nunca se evalúa a TRUE
.
Actualización: Parece que mi depurador no mostraba los valores correctos y que esta pregunta ya no es válida. Perdón por esa confusión.
[recordatorio útil] como usuario experimentado, supongo que se olvidó de aceptar una respuesta (dcp's o Jeffrey's). –
@AlexanderMalakhov: He querido aceptar una respuesta en varias ocasiones, pero la pregunta parece no responder ahora que el código parece estar ejecutándose correctamente. A menos que esté equivocado, ninguna respuesta podría explicar por qué 'NOT is_viewable' ** siempre ** evalúa a' FALSE' (independientemente del valor de 'is_viewable') mientras que' is_viewable = FALSE' se evaluaría como 'TRUE' o' FALSE', según el valor de 'is_viewable'. Como el problema se detuvo, no puedo verificar ninguna respuesta. :( –
Entendido. Tuve una respuesta similar (wrt "no correcta, no puedo verificar") [pregunta] (http://stackoverflow.com/questions/2233856/oracle-forms-6i-crashes-with-0xc0000005-at -start-after-installation-patch-19). Como había muy poca probabilidad de que alguien más respondiera mi Q, he decidido aceptar la respuesta * más útil * (en lugar de la correcta). Así que para recompensar al hombre por su tiempo y esfuerzo. Y para mi Q no está en la lista de no respondidos. Aunque para ser claro, no tengo ningún problema con alguien que no sigue mi estrategia (más aún porque evidentemente está haciendo un gran trabajo para la comunidad SO) –