boolean in Oracle

En zo rijst de vraag: ‘hoe sla ik een boolean op in een Oracle tabel’. Nee create tabel xyz (abc boolean); werkt dus niet, datatype boolean wordt niet ondersteund op tabelniveau. Daarom zal een benadering van de waarheid gezocht moeten worden (of zoals gesteld ‘keep the datatype as restrictive as possible’).

Dus ben ik nu aan het uitzoeken of 1 van de volgende datatypes uit het create table statement hieraan voldoet:

create table test (bool_char char(1)    default 0 check (bool_char in ('0','1')) not null
                  ,bool_var  varchar(1) default 0 check (bool_var in ('0','1'))  not null                
                  ,bool_int  integer    default 0 check (bool_int in (0,1))      not null
                  ,bool_num  number(1)  default 0 check (bool_num in (0,1))      not null);

De integer valt al af dat is impliciet een number(38). De keuze tussen char(1) en varchar(1) is arbitrair, want identiek aan elkaar technisch gesproken. Omdat we hier nullen en enen opslaag is de number(1) variant al gauw goed. Maar in dat geval start ik zelf altijd de discussie, ik vind dat datatype number waarden bevat waarmee gerekend kan worden: select sum(bool_num) from test; zal vast een getal opleveren, maar dat is een nikszeggend getal, met booleans kan men niet rekenen. In mijn belevenis hoort men in dit geval voor char(1) (of varchar2(1)) te kiezen met de nodige constraint.