Instrucción equivalente a Silnm() de Access en Base

La instrucción Silnm de Access evalúa una condición expresada en su primer argumento, y devuelve el valor evaluado en su segundo argumento si la condición es cierta, o el valor evaluado en su tercer argumento si la condición es falsa.

SiInm(ExpresiónCondición, Siverdadera, Sifalsa)

En OOo.Base disponemos de la función IIf ( ExpresiónCondición ; Siverdadera ; Sifalsa ) para ser utilizada desde una macro.

Si lo que deseamos es realizar una consulta en la que se evalúe una expresión de este tipo, podremos utilizar la instrucción CASE WHEN, que a diferencia de la función IIf, no nos devuelve un valor, sino que ejecuta una orden SQL:

CASE WHEN ExpresiónCondición THEN Siverdadera ELSE Sifalsa END

Permite evaluar varias expresiones de condición, devolviendo un valor si es cierta una de ellas o el valor tras el ELSE si no se cumple ninguna:

CASE WHEN ExpresiónCondición1 THEN Siverdadera1 WHEN ExpresiónCondición2 THEN Siverdadera2 WHEN ExpresiónCondición3 THEN Siverdadera3 ELSE SiTodasfalsas END

Por ejemplo:

CASE var_one
    WHEN 22, 23 THEN INSERT INTO t_one ...;
    WHEN IN (2, 4, 5) THEN DELETE FROM t_one WHERE ...;
    ELSE UPDATE t_one ...;
END CASE

O también:

CASE WHEN var_one = 22 OR var_one = 23 THEN INSERT INTO t_one ...;
    WHEN var_one IN (2, 4, 5) THEN DELETE FROM t_one WHERE ...;
    WHEN var_two IS NULL THEN UPDATE t_one ...;
    ELSE UPDATE t_one ...;
END CASE

Nota: No confundir con la instrucción CASE. Ejemplo de ésta última:

CASE dialcode WHEN 44 THEN 'Britain' WHEN 49 THEN 'Germany' ELSE 'Other country' END
CASE WHEN dialcode=44 THEN 'Britain' WHEN dialcode=49 THEN 'Germany' WHEN dialcode < 0 THEN
'baddial code' ELSE 'Other country' END
CASE dialcode WHEN IN (44, 49,30) THEN 'Europe' WHEN IN (86,91,91) THEN 'Asia' WHEN < 0 THEN
'baddial code' ELSE 'Other continent' END

Consulta el manual de HSQL para más información (Versión PDF).

OpenOffice.org Base utiliza como motor de base de datos HyperSQL.

No hay reacciones, todavía


Form is loading...