В MySQL установленный тип данных является именованным битовым типом данных.В Oracle нет такового, хотя вы можете эмулировать его, если действительно хотите, используя ограниченный целочисленный тип данных:
CREATE TABLE staff (
staffid INTEGER GENERATED BY DEFAULT AS IDENTITY ( START WITH 1 NOCACHE ORDER ) NOT NULL PRIMARY KEY
, availability INTEGER CHECK ( availability BETWEEN 0 AND 256 )
);
. Вам нужно будет запомнить или создать функцию для сопоставления между значениями растрового изображения идней.
Другой вариант - использовать справочную таблицу:
create table availability as
with t1(id, mon, tue, wed, thu, fri, satam, satpm, sun) as (
select 0, 0, 0, 0, 0, 0, 0, 0, 0 from dual
union all
select id+1
, sign(bitand(id+1,1))
, sign(bitand(id+1,2))
, sign(bitand(id+1,4))
, sign(bitand(id+1,8))
, sign(bitand(id+1,16))
, sign(bitand(id+1,32))
, sign(bitand(id+1,64))
, sign(bitand(id+1,128))
from t1 where id+1 <256
)
select * from t1;
alter table availability add primary key (id);
CREATE TABLE staff (
staffid INTEGER GENERATED BY DEFAULT AS IDENTITY ( START WITH 1 NOCACHE ORDER ) NOT NULL PRIMARY KEY
, availability INTEGER
, CONSTRAINT staff_avail_fk FOREIGN KEY ( availability ) REFERENCES availability ( id )
);