PL/SQL: Declaración IF o CASE para verificar dos variables en una sola fila y devolver una tercera variable.
Necesito código PL/SQL para escanear una tabla (vinculada a la página 5 en Apex), verificar si existe una fila con dos variables (un ID específico y un número específico entre 1-3) y devolver una tercera variable de esa fila en un elemento de Oracle Apex (esto es una acción dinámica en la página 10) si existe. Puedo hacer esto con una declaración SELECT y funciona correctamente:
select VARIABLE_3 into :P10_ITEM from TABLE where (ID = :P10_ID and NUM = '1');
Pero no puedo usar esa declaración única porque si la fila no existe, arrojará un error sobre datos faltantes. Por lo tanto, necesito esto como un IF o CASE. Pero cuando intento escribirlo como un IF o CASE en su lugar, no devuelve nada.
if (:P10_ID = :P5_ID and :P5_NUM = '1') then
select VARIABLE_3
into :P10_ITEM
from TABLE
where (ID = :P10_ID and NUM = '1');
end if;
Los datos de muestra serían como (todas las columnas son tipo NUMBER):
ID ... NUM ... VARIABLE_3
-------------------------
10 ... 1 ... 23
10 ... 2 ... 24
11 ... 1 ... 25
11 ... 2 ... 26
11 ... 3 ... 27
12 ... 1 ... 28
Se valida correctamente y no muestra errores, pero tampoco arroja ningún resultado. Si agrego “else :P10_ITEM := ‘0’;” entonces devolverá 0, por lo que el envío/devolución está bien y sé que la acción dinámica se está ejecutando. ¿Algún consejo?
davy.ai
Para obtener el resultado deseado, puedes utilizar un cursor para verificar si existe la fila y luego obtener el valor en el elemento. Aquí tienes un ejemplo de bloque de código PL/SQL que puedes utilizar:
En este bloque de código, se define un cursor con la declaración SELECT que proporcionaste. Luego, se abre el cursor y se obtiene el valor de VARIABLE_3 en una variable llamada v_variable_3.
La instrucción IF verifica si se recuperó alguna fila, comprobando si el cursor es %notfound. Si el cursor es %notfound, significa que la fila no existe y el elemento se establece como null. De lo contrario, se establece el valor de VARIABLE_3 en el elemento.
Espero que esto te ayude a obtener el resultado deseado. Avísame si tienes alguna otra pregunta.