在mysql中,我们可以使用set datatype为任何特定行的每列选择多个值,如下所示:
CREATE TABLE `staff` ( `StaffID` int(5) NOT NULL AUTO_INCREMENT,
`Availability` set('Mon','Tue','Wed','Thur','Fri','SatAM','SatPM','Sun') DEFAULT NULL,
PRIMARY KEY (`StaffID`))
那我就可以了,
INSERT INTO `staff` (`Availability`) VALUES ('Tue,Wed,SatPM')
我试着到处找,但找不到任何合适的数据类型来存储Oracle中的多个选定选项。Oracle文档似乎显示MySQL集没有其他选择,但我不敢相信他们没有!有人能帮我澄清一下吗?
Oracle Documentation referenceOriginal link
最佳答案
在mysql中,set数据类型是一个命名的位映射数据类型。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 )
);
关于mysql - Oracle中的MySQL Set数据类型等效吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53560322/