2009-12-31 91 views
19

Quiero comprobar si una variable es nula. Si es nulo, entonces quiero establecer un valor para esa variable:Comprueba si una variable es nula en plsql

//data type of var is number 
if Var = null then 
    var :=5; 
endif 

Pero estoy recibiendo un error en el mismo. ¿Cómo puedo verificar si una variable es nula?

estoy usando tipo de datos Oracle

Respuesta

38
if var is NULL then 
    var :=5; 
end if; 
17

Uso:

IF Var IS NULL THEN 
    var := 5; 
ENDIF; 

Oracle 9i +:

var = COALESCE(Var, 5) 

Otras alternativas:

var = NVL(var, 5) 

Referencia:

2

Recuerde siempre que tener cuidado con nulos en las cláusulas condicionales PL/SQL como nula nunca es mayor, menor, igual o desigual a la nada. La mejor forma de evitarlos es usar nvl.

Por ejemplo

declare 
    i integer; 
begin 
    if i <> 1 then 
    i:=1; 
    foobar(); 
    end if; 
end; 
/

nunca pasa dentro de la cláusula if.

Esto funcionaría.

if 1<>nvl(i,1) then 
if i<> 1 or i is null then 
2

Otra forma:

var := coalesce (var, 5); 

COALESCE es el equivalente ANSI (más o menos) de la función NVL de Oracle.

11

En PL/SQL no se puede utilizar operadores tales como '=' o '<>' para la prueba de NULL porque todas las comparaciones a NULL retorno NULL. Para comparar algo en contra de NULL, necesita utilizar los operadores especiales IS NULL o IS NOT NULL que están ahí precisamente para este propósito.Por lo tanto, en lugar de escribir

IF var = NULL THEN... 

debe escribir

IF VAR IS NULL THEN... 

En el caso de que hayas dado que también tiene la opción de utilizar la función incorporada NVL. NVL toma dos argumentos, el primero es una variable y el segundo es un valor (constante o calculado). NVL mira su primer argumento y, si encuentra que el primer argumento es NULL, devuelve el segundo argumento. Si el primer argumento para NVL no es NULL, se devuelve el primer argumento. Por lo que podría reescribir

IF var IS NULL THEN 
    var := 5; 
END IF; 

como

var := NVL(var, 5); 

espero que esto ayude.

+2

Esperé 5 años para decirte esto, pero gracias por tu respuesta. –

Cuestiones relacionadas