viernes, 21 de abril de 2023

Oracle 23c - Tipo de Datos BOOLEAN en SQL


Si bien Oracle posee el tipo de datos Boolean en su lenguaje PL/SQL, el mismo no podía ser utilizado para definir columnas en la base de datos, ni en sentencias SQL.


BOOLEAN en Columnas

El nuevo tipo de datos puede utilizarse en columnas de tablas y vistas en Oracle 23c, como podemos ver a continuación:

CREATE TABLE IF NOT EXISTS tClientes (ID_Cliente NUMBER(10), Nombre_Cliente VARCHAR2(100), Activo BOOLEAN);
Nota: En el ejemplo usamos la nueva sintaxis de Oracle 23c "IF NOT EXITS" explicada en el artículo "Oracle 23c - IF [NOT] EXISTS en Sentencias DDL" de este blog.

Este nuevo tipo de datos acepta múltiples valores de entrada que son automáticamente convertidos a TRUE o FALSE, como podemos ver en la siguiente tabla:


Valor Boolean Valores Aceptados de Entrada
TRUE TRUE, true, 'TRUE', 'true', 'yes', 'YES', 'on', 'ON', 't', 'T', 'y', 'Y', '1', 1
FALSE FALSE, false, 'FALSE', 'false', 'no', 'NO', 'off', 'OFF', 'f', 'F', 'n', 'N', '0', 0


Podemos confirmarlo mediante este script que nos permitirá insertar datos de prueba en la tabla que creamos:

INSERT INTO tClientes VALUES (1,'Cliente 1', TRUE); INSERT INTO tClientes VALUES (2,'Cliente 2', FALSE); INSERT INTO tClientes VALUES (3,'Cliente 3', 1); INSERT INTO tClientes VALUES (4,'Cliente 5', '0'); INSERT INTO tClientes VALUES (5,'Cliente 5', 45); INSERT INTO tClientes VALUES (6,'Cliente 6', 'f'); INSERT INTO tClientes VALUES (7,'Cliente 7', 'ON'); INSERT INTO tClientes VALUES (8,'Cliente 8', 'n');

Nota: Al usar valores numéricos, cualquier valor distinto de 0 será considerado como VERDADERO (TRUE) y el valor 0 como FALSO (FALSE).


Restricciones

Podemos crear restricciones de diversos tipos sobre columnas BOOLEAN, como ser:

  • Clave Primaria (Primary Key)
  • Clave Foránea (Foreign Key)
  • Clave Única (Unique Key)
  • Check Constraint 
  • NOT NULL


Valor por Defecto

Se puede definir un valor por defecto para las columnas de tipo BOOLEAN:

CREATE TABLE tBoolean (ID NUMBER(10), Activo BOOL DEFAULT TRUE);
Nota: Se puede abreviar el nombre de tipo de datos a BOOL en vez de BOOLEAN.

Uso en SQL

El tipo de datos BOOLEAN puede usarse en sentencias SQL como cualquier otro tipo de datos de Oracle. En el siguiente ejemplo, vamos a mostrar los registros de la tabla creada anteriormente que posean la columna Activo con un valor de TRUE usando SQL Developer 23.1:

SELECT *
FROM tClientes c
WHERE c.Activo = TRUE;
Obteniendo el siguiente resultado:



Podemos ver que la consulta devuelve solo 4 registros (lo cual es correcto ya que el valor 45 utilizado al insertar el cliente #5 es considerado TRUE) pero la columna Activo muestra como valor 1 y no TRUE. Esto se debe a que el cliente JDBC incluido en SQL Developer todavía no realiza la conversión correcta, pero si probamos la misma sentencia en SQL*Plus incluido con Oracle Database 23c, el resultado mostrado es el correcto:



Cambios en Funciones de Conversión

Las funciones TO_NUMBER, TO_CHAR y TO_NCHAR fueron modificadas para aceptar valores booleanos como entrada, como podemos ver a continuación:

SELECT c.ID_Cliente, TO_CHAR(Activo) AS ValChar, TO_NUMBER(Activo) AS ValNum
FROM tClientes c
WHERE c.ID_Cliente < 4;
Obteniendo el siguiente resultado:



Y también se incorpora una nueva función TO_BOOLEAN para convertir valores numéricos o de texto en booleanos:

SELECT TO_BOOLEAN(2), TO_BOOLEAN('t'), TO_BOOLEAN('false');
Podemos ver (en SQL*Plus) que devuelve TRUE o FALSE según el caso (en SQL Developer por el momento devuelve 1 o 0 como mencionamos anteriormente):



Nota: En este ejemplo usamos la nueva funcionalidad de sentencias SELECT sin clausula FROM, la cual ya comentamos en el artículo "Oracle 23c - Sentencias SELECT sin cláusula FROM".


Conclusión

Oracle Database 23c incorpora el tipo de datos BOOLEAN (ya existente en PL/SQL) en su lenguaje SQL permitiendo definir columnas con este tipo de datos y consultando o filtrando las mismas en sentencias SQL, como se documenta en la sección Data Types de la documentación de Oracle Database 23c.


Si desean conocer más sobre Oracle 23c, es recomendable que vean estos artículos en este blog como punto de partida:

Adicionalmente, pueden consultar todos los artículos relacionados a Oracle Database 23c agrupados en en el tag Database 23c.

No hay comentarios.:

Publicar un comentario