Существует ли логический тип в оракулных базах данных, аналогичный типу BIT в MS SQL?
В Oracle SQL (не PL/SQL) отсутствует некий логический тип данных, но у них также нет четкой рекомендации относительно того, что использовать. См. этот поток на asktom. Из рекомендаций CHAR(1) 'Y'/'N'
они переключаются на NUMBER(1) 0/1
, когда кто-то указывает, что 'Y'/'N'
зависит от английского языка, в то время как, например, Немецкие программисты могут вместо этого использовать 'J'/'N'
.
Хуже всего то, что они защищают это глупое решение, как будто они защищают глупость ''=NULL
.
Неа.
Может использовать:
IS_COOL NUMBER(1,0)
1 - true
0 - false
--- наслаждайтесь Oracle
Или используйте char Y/N как описано здесь
create table testbool (boolc char(1), booln number(1)); insert into testbool values ('Y', 1 ); select dump(boolc), dump(booln) from testbool;
Этот CHAR хранится: Typ=96 Len=1: 89
и что NUMBER: Typ=2 Len=2: 193,2
По крайней мере, в 12c NUMBER (1) может использовать 2 байта ...
В соответствии с ответами Ammoq и kupa, мы используем число (1) со значением по умолчанию 0 и не допускаем null.
здесь добавьте столбец для демонстрации:
ALTER TABLE YourSchema.YourTable ADD (ColumnName NUMBER(1) DEFAULT 0 NOT NULL);
Надеюсь, это поможет кому-то.
boolean intToBool(int in) { return (in != 0); }
Не на уровне SQL и жаль В PLSQL есть один, хотя
Нет такого типа boolean, но вместо этого вы можете использовать 1/0 (номер типа) или 'Y'/'N' (тип char), или 'true'/'false' (тип varchar2).
Общим трюком для экономии пространства является сохранение значений boolean как Oracle CHAR, а не NUMBER:
Существует тип boolean для использования в pl/sql, но ни один из них не может использоваться в качестве типа данных столбца.
Просто потому, что никто не упомянул об этом: использование RAW (1) также кажется обычной практикой.
Нет, в базе данных 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' ));
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;