¿Existe algún tipo booleano en las bases de datos Oracle?

Resuelto Peder asked hace 14 años • 0 respuestas

¿Existe algún tipo booleano en las bases de datos Oracle, similar al BITtipo de datos en Ms SQL Server?

Peder avatar Sep 16 '10 19:09 Peder
Aceptado

Antes de la versión 23c (2023), no solo faltaba el tipo de datos booleano en SQL de Oracle (no en PL/SQL), sino que tampoco tenían una recomendación clara sobre qué usar en su lugar. Vea este hilo en Asktom. Desde recomendar CHAR(1) 'Y'/'N'que cambien hasta NUMBER(1) 0/1cuando alguien señala que 'Y'/'N'depende del idioma inglés, mientras que, por ejemplo, los programadores alemanes podrían usarlo 'J'/'N'en su lugar.

Lo peor es que defienden esta estúpida decisión igual que defienden la ''=NULLestupidez.


Oracle 23c finalmente admite tipos de datos booleanos en todos los contextos, junto con varias otras características de las que carecía en comparación con otras bases de datos.

SQL> select true;

TRUE
-----------
TRUE

SQL> create table test1(a boolean);

Table created.

SQL> insert into test1 values (true),(false),(to_boolean(0)),(to_boolean('y'));

4 rows created.

Pero el problema de las cadenas vacías nunca cambiará.

Jon Heller avatar Sep 16 '2010 12:09 Jon Heller

No.

Puedo usar:

IS_COOL NUMBER(1,0)

1 - true
0 - false

--- disfruta del oráculo

O utilice el carácter Y/N como se describe aquí

Bohdan avatar Jun 24 '2014 21:06 Bohdan

Según las respuestas de Ammoq y kupa, usamos el número (1) con el valor predeterminado 0 y no permitimos valores nulos.

aquí hay una columna adicional para demostrar:

ALTER TABLE YourSchema.YourTable ADD (ColumnName NUMBER(1) DEFAULT 0 NOT NULL);

Espero que esto ayude a alguien.

Alex Stephens avatar Sep 10 '2015 07:09 Alex Stephens

No, no existe un tipo booleano en Oracle Database, pero puedes hacerlo de esta manera:

Puede poner una restricción de verificación en una columna.

Si su tabla no tiene una columna de verificación, puede agregarla:

ALTER TABLE table_name
ADD column_name_check char(1) DEFAULT '1';

Cuando agrega un registro, de forma predeterminada esta columna obtiene 1.

Aquí pones un check que limita el valor de la columna, solo pon 1 o 0

ALTER TABLE table_name ADD
CONSTRAINT name_constraint 
column_name_check (ONOFF in ( '1', '0' ));
Roberto Góes avatar Jun 16 '2017 12:06 Roberto Góes