Есть ли логический тип в базах данных Oracle? - PullRequest
220 голосов
/ 16 сентября 2010

Существует ли какой-либо логический тип в базах данных Oracle, аналогичный типу данных BIT в Ms SQL Server?

Ответы [ 10 ]

240 голосов
/ 16 сентября 2010

Мало того, что логический тип данных отсутствует в SQL Oracle (не PL / SQL), но у них также нет четкой рекомендации о том, что вместо этого использовать. См. эту тему на AskTom. От рекомендации CHAR(1) 'Y'/'N' они переключаются на NUMBER(1) 0/1, когда кто-то указывает, что 'Y'/'N' зависит от английского языка, в то время как, например, Немецкие программисты могут использовать 'J'/'N' вместо.

Хуже всего то, что они защищают это глупое решение точно так же, как они защищают ''=NULL глупость.

47 голосов
/ 25 июня 2014

Нет.

Можно использовать:

IS_COOL NUMBER(1,0)

1 - true
0 - false

--- наслаждайтесь Oracle

Или используйте символ Y / N , как описано здесь

34 голосов
/ 10 сентября 2015

Согласно ответам Аммока и Купы, мы используем число (1) с значением по умолчанию 0 и не допускаем нули.

вот добавить столбец для демонстрации:

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

Надеюсь, это кому-нибудь поможет.

14 голосов
/ 16 сентября 2010

Не на уровне SQL, и это очень жаль

12 голосов
/ 16 июня 2017

Нет, в базе данных Oracle нет логического типа, но вы можете сделать это следующим образом:

Вы можете установить проверочное ограничение на столбец.

Если в вашей таблице нет столбца проверки, вы можете добавить его:

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

Когда вы добавляете регистр, по умолчанию этот столбец получает 1.

Здесь вы ставите проверку, ограничивающую значение столбца, просто ставьте только 1 или 0

ALTER TABLE table_name ADD
CONSTRAINT name_constraint 
column_name_check (ONOFF in ( '1', '0' ));
8 голосов
/ 16 сентября 2010

Нет, не существует типа boolean, но вместо этого вы можете использовать 1/0 (номер типа), или 'Y' / 'N' (тип char), или 'true' / 'false' (типvarchar2).

5 голосов
/ 16 сентября 2010

Существует логический тип для использования в pl / sql , но ни один из них не может использоваться в качестве типа данных столбца.

4 голосов
/ 16 сентября 2010

Распространенным приемом экономии места является сохранение логических значений в виде Oracle CHAR , а не NUMBER:

3 голосов
/ 16 сентября 2010

Просто потому, что никто еще не упомянул об этом: использование RAW (1) также кажется обычной практикой.

0 голосов
/ 07 августа 2015
DECLARE
error_flag  BOOLEAN := false;
BEGIN

error_flag := true;
--error_flag := 13;--expression is of wrong type

  IF error_flag THEN 

UPDATE table_a SET id= 8 WHERE id = 1;

END IF;
END;
...