Cadenas nulas en PL/SQL

Un tip de PL/SQL que es simple, pero que les puede ahorrar algunos dolores de cabeza. Imaginen que tienen el código de abajo, cuál creen que sea la salida?

PLSQL:
  1. --se asigna a una cadena vacía (dos comillas simples sin espacio entre ellas)
  2. v_cadena VARCHAR2(20) := '';
  3. IF v_cadena = '' THEN
  4. DBMS_OUTPUT.put_line('EN EL IF');
  5. DBMS_OUTPUT.put_line('EN EL ELSE');
  6. END;

Si pensaron que sería EN EL IF se equivocaron. Para PL/SQL, asignar una cadena vacía a una variable, equivale a asignarle NULL, por lo que la condición v_cadena = '' dará FALSO. Raro, pero es así como sucede.

Se puede comprobar ejecutando lo siguiente:

PLSQL:
  1. --se asigna a una cadena vacía (dos comillas simples sin espacio entre ellas)
  2. v_cadena VARCHAR2(20) := '';
  3. IF v_cadena = '' THEN
  4. DBMS_OUTPUT.put_line('EN EL IF');
  5. ELSIF v_cadena IS NULL THEN
  6. DBMS_OUTPUT.put_line('EN EL ELSIF');
  7. DBMS_OUTPUT.put_line('EN EL ELSE');
  8. END;

Esta vez, la salida será EN EL ELSIF

Nota: En otros lenguajes (como Java), esto no sucede y asignar null y cadena vacía son dos cosas distintas.

3 Comentarios

  1. Comentado julio 26, 2008 a las 2:15 am | Permalink

    la verdad si creí que en el primer ejemplo daba: EN EL IF
    lo tendré en consideración.
    saludos!

  2. Comentado julio 27, 2008 a las 10:18 am | Permalink

    Bastante curioso. Tendra algo que ver con que si el caracter es vacio, se autodeclare internamete como NULL, ya que PL/SQL es un lenguaje derivado de Ada como puede serlo tambien VHDL.

  3. Franchesco
    Comentado mayo 12, 2010 a las 4:13 pm | Permalink

    Muchisimas gracias no sabia como resolver un problema de este estilo, es la segunda vez que me salva tu web de estar sufriendo por varias hrs.

Escribe un Comentario

Su correo nunca será publicado ni compartido. Los campos requeridos están marcados *

*
*
CC 2009 El Módem. Some rights reserved.