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.    ELSE
  6.       DBMS_OUTPUT.put_line('EN EL ELSE');
  7.    END IF;
  8. 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.    ELSE
  8.       DBMS_OUTPUT.put_line('EN EL ELSE');
  9.    END IF;
  10. 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.

Entradas Relacionadas:
  • Cifrar texto usando MD5 en PL SQL
  • IF IF IF IF IF
  • ORA-01422: Exact fetch returns more than requested number of rows
  • 2 Respuestas a “Cadenas nulas en PL/SQL”


    1. 1 sAfOrAs

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

    2. 2 shakaran

      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.

    Añade un Comentario