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.

2 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.

Escribe un Comentario

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

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