请教高手呀--创建影厅信息表(cinemaInfo)
create table cinemaInfo
(
cid number primary key,--编号
cname varchar2(10) not null, --影厅名称
re varchar2(50)
);
--电影信息表(filmInfo)
create table filmInfo
(
fid number primary key,--编号
fname varchar2(20) not null,--电影名称
director varchar2(20) not null,--导演
starring varchar2(20) not null,--主演
style varchar2(20) not null,--类型
flanguage varchar2(20) not null,--语言
fdate date not null,--上映日期(电影首映日期)
length number not null,--片长(电影所播放的长度) 单位:分钟
price number(4,1) not null,--价格
image varchar2(50) not null,--图片
drama varchar2(100),--剧情
critic varchar2(50) --一句话影评
);--影片上映时间表(release)
create table release
(
rid number primary key,--上映时间表编号
fid number references filmInfo(fid),--电影编号(外键)
cid number references cinemaInfo(cid),--所要播放的影厅编号(外键)
rdate date not null,--上映日期
rtime date not null --上映时间
);--创建序列
create sequence cinemaInfo_seq;
create sequence filmInfo_seq;
create sequence release_seq;insert into cinemainfo values(cinemaInfo_seq.Nextval,'一号影厅','一号影厅');
insert into cinemainfo values(cinemaInfo_seq.Nextval,'二号影厅','二号影厅');
insert into cinemainfo values(cinemaInfo_seq.Nextval,'三号影厅','三号影厅');insert into filmInfo values(filmInfo_seq.Nextval,'钢铁侠2','乔恩法弗罗','小罗伯特唐尼','科幻','英语','2010-06-01','90','65','/upload/gg.jpg','','');
insert into filmInfo values(filmInfo_seq.Nextval,'叶问2','冯晓刚','甄子丹','动作片','国语','2010-06-01','90','65','/upload/yy.jpg','','')
一部影片播放完后,到下一部影片开始 中途清场时间间隔 30分钟insert into release values(release_seq.nextval,1,1,to_date('2010-06-01','yyyy-MM-dd'),to_date('2010-06-01 19:30','yyyy-MM-dd hh24:mi'));
insert into release values(release_seq.nextval,1,1,to_date('2010-06-01','yyyy-MM-dd'),to_date('2010-06-01 21:30','yyyy-MM-dd hh24:mi'));release表数据如下:
rid fid cid rdate rtime
--- ---- --- ----- -------------------
1 1 1 2010-06-01 2010-06-01 19:30:00
2 1 1 2010-06-01 2010-06-01 21:30:00现在想将叶问2加入档期 该电影编号为2
用户选择的 影厅编号1 电影编号2 日期选择 2010-06-01 时间也可以选择
我想判断 该影片(叶问2) 在该影厅(编号1) 该日期(2010-06-01) 是否能在选择的时间 上映?
比如在2010-06-01 17:30 到 2010-06-01 23:30 之间是不能加入档期的
create table cinemaInfo
(
cid number primary key,--编号
cname varchar2(10) not null, --影厅名称
re varchar2(50)
);
--电影信息表(filmInfo)
create table filmInfo
(
fid number primary key,--编号
fname varchar2(20) not null,--电影名称
director varchar2(20) not null,--导演
starring varchar2(20) not null,--主演
style varchar2(20) not null,--类型
flanguage varchar2(20) not null,--语言
fdate date not null,--上映日期(电影首映日期)
length number not null,--片长(电影所播放的长度) 单位:分钟
price number(4,1) not null,--价格
image varchar2(50) not null,--图片
drama varchar2(100),--剧情
critic varchar2(50) --一句话影评
);--影片上映时间表(release)
create table release
(
rid number primary key,--上映时间表编号
fid number references filmInfo(fid),--电影编号(外键)
cid number references cinemaInfo(cid),--所要播放的影厅编号(外键)
rdate date not null,--上映日期
rtime date not null --上映时间
);--创建序列
create sequence cinemaInfo_seq;
create sequence filmInfo_seq;
create sequence release_seq;insert into cinemainfo values(cinemaInfo_seq.Nextval,'一号影厅','一号影厅');
insert into cinemainfo values(cinemaInfo_seq.Nextval,'二号影厅','二号影厅');
insert into cinemainfo values(cinemaInfo_seq.Nextval,'三号影厅','三号影厅');insert into filmInfo values(filmInfo_seq.Nextval,'钢铁侠2','乔恩法弗罗','小罗伯特唐尼','科幻','英语','2010-06-01','90','65','/upload/gg.jpg','','');
insert into filmInfo values(filmInfo_seq.Nextval,'叶问2','冯晓刚','甄子丹','动作片','国语','2010-06-01','90','65','/upload/yy.jpg','','')
一部影片播放完后,到下一部影片开始 中途清场时间间隔 30分钟insert into release values(release_seq.nextval,1,1,to_date('2010-06-01','yyyy-MM-dd'),to_date('2010-06-01 19:30','yyyy-MM-dd hh24:mi'));
insert into release values(release_seq.nextval,1,1,to_date('2010-06-01','yyyy-MM-dd'),to_date('2010-06-01 21:30','yyyy-MM-dd hh24:mi'));release表数据如下:
rid fid cid rdate rtime
--- ---- --- ----- -------------------
1 1 1 2010-06-01 2010-06-01 19:30:00
2 1 1 2010-06-01 2010-06-01 21:30:00现在想将叶问2加入档期 该电影编号为2
用户选择的 影厅编号1 电影编号2 日期选择 2010-06-01 时间也可以选择
我想判断 该影片(叶问2) 在该影厅(编号1) 该日期(2010-06-01) 是否能在选择的时间 上映?
比如在2010-06-01 17:30 到 2010-06-01 23:30 之间是不能加入档期的
解决方案 »
- 如何统计一个表的记录长度
- ORACAL游标返回值问题
- 如何查询不关联的数据.
- 求助!!关于extent的管理方式!!
- OracleOraHomeClientCache这个服务是做什么用的?
- 求把一数据库表迅速导出oracle成为标准文本文件的方法
- 请问如何把“truncate table tab_name”写到过程里执行啊?
- 大家帮我看一下这句那儿有错误(在线等)
- 在存储过程中,通过链路从另一个数据库中取一个大表到本数据库,……………(100)
- 一个分组函数的查询问题,不能使用子查询
- 只有归档日志,可以恢复以前的数据吗?
- RMB求解:如何用编程的方式实现事务处理?换句话说就是自己开发数据库事务处理
--创建影厅信息表(cinemaInfo)
create table cinemaInfo
(
cid INT IDENTITY primary key,--编号
cname varchar(10) not null, --影厅名称
re varchar(50)
);
--电影信息表(filmInfo)
create table filmInfo
(
fid int identity primary key,--编号
fname varchar(20) not null,--电影名称
director varchar(20) not null,--导演
starring varchar(20) not null,--主演
style varchar(20) not null,--类型
flanguage varchar(20) not null,--语言
fdate date not null,--上映日期(电影首映日期)
[length] int not null,--片长(电影所播放的长度) 单位:分钟
price dec(4,1) not null,--价格
[image] varchar(50) not null,--图片
drama varchar(100),--剧情
critic varchar(50) --一句话影评
);--影片上映时间表(release)
create table release
(
rid INT identity primary key,--上映时间表编号
fid int references filmInfo(fid),--电影编号(外键)
cid int references cinemaInfo(cid),--所要播放的影厅编号(外键)
rdate datetime not null,--上映日期
rtime datetime not null --上映时间
);
insert into cinemainfo values('一号影厅','一号影厅');
insert into cinemainfo values('二号影厅','二号影厅');
insert into cinemainfo values('三号影厅','三号影厅');insert into filmInfo values('钢铁侠2','乔恩法弗罗','小罗伯特唐尼','科幻','英语','2010-06-01','90','65','/upload/gg.jpg','','');
insert into filmInfo values('叶问2','冯晓刚','甄子丹','动作片','国语','2010-06-01','90','65','/upload/yy.jpg','','')insert into release values(1,1,'2010-06-01','2010-06-01 19:30');
insert into release values(1,1,'2010-06-01','2010-06-01 21:30');
*/
--SELECT * FROM cinemaInfo ci
--SELECT * FROM filmInfo fi
--SELECT * FROM release r
IF OBJECT_ID('[p_test]') IS NOT NULL
DROP PROC [p_test]
GO
CREATE PROC [p_test]
@电影名 varchar(100),
@影厅名 varchar(100),
@放映时间 datetime
AS
IF EXISTS(
SELECT 1
FROM filmInfo a
JOIN cinemaInfo b
ON a.fname = @电影名
AND b.cname = @影厅名
AND EXISTS(
SELECT *
FROM release m
JOIN filmInfo n
ON m.fid = n.fid
WHERE m.cid = b.cid
AND (
DATEADD(mi, a.[length]+30, @放映时间) BETWEEN rtime AND DATEADD(mi, n.[length]+30, rtime)
OR @放映时间 BETWEEN rtime AND DATEADD(mi, n.[length]+30, rtime)
)
)
)
SELECT '在此时间不能放映' AS 状态
ELSE
SELECT '在此时间可以放映' AS 状态
GO
EXEC [p_test] '叶问2','一号影厅','2010-06-01 19:30:00'
/*
状态
----------------
在此时间不能放映(1 行受影响)
*/
EXEC [p_test] '叶问2','二号影厅','2010-06-01 19:30:00'
/*
状态
----------------
在此时间可以放映(1 行受影响)
*/EXEC [p_test] '叶问2','一号影厅','2010-06-01 17:29:00'
/*
状态
----------------
在此时间可以放映(1 行受影响)
*/EXEC [p_test] '叶问2','一号影厅','2010-06-01 17:30:00'
/*
状态
----------------
在此时间不能放映(1 行受影响)
*/EXEC [p_test] '叶问2','一号影厅','2010-06-01 23:30:00'
/*
状态
----------------
在此时间不能放映(1 行受影响)
*/
EXEC [p_test] '叶问2','一号影厅','2010-06-01 23:31:00'
/*
状态
----------------
在此时间可以放映(1 行受影响)
*/
--创建影厅信息表(cinemaInfo)
create table cinemaInfo
(
cid INT IDENTITY primary key,--编号
cname varchar(10) not null, --影厅名称
re varchar(50)
);
--电影信息表(filmInfo)
create table filmInfo
(
fid int identity primary key,--编号
fname varchar(20) not null,--电影名称
director varchar(20) not null,--导演
starring varchar(20) not null,--主演
style varchar(20) not null,--类型
flanguage varchar(20) not null,--语言
fdate date not null,--上映日期(电影首映日期)
[length] int not null,--片长(电影所播放的长度) 单位:分钟
price dec(4,1) not null,--价格
[image] varchar(50) not null,--图片
drama varchar(100),--剧情
critic varchar(50) --一句话影评
);--影片上映时间表(release)
create table release
(
rid INT identity primary key,--上映时间表编号
fid int references filmInfo(fid),--电影编号(外键)
cid int references cinemaInfo(cid),--所要播放的影厅编号(外键)
rdate datetime not null,--上映日期
rtime datetime not null --上映时间
);
insert into cinemainfo values('一号影厅','一号影厅');
insert into cinemainfo values('二号影厅','二号影厅');
insert into cinemainfo values('三号影厅','三号影厅');insert into filmInfo values('钢铁侠2','乔恩法弗罗','小罗伯特唐尼','科幻','英语','2010-06-01','90','65','/upload/gg.jpg','','');
insert into filmInfo values('叶问2','冯晓刚','甄子丹','动作片','国语','2010-06-01','90','65','/upload/yy.jpg','','')
---插入1-----------------------------------------
insert into filmInfo values('变形金钢2','乔恩法弗罗','小罗伯特唐尼','科幻','英语','2010-06-01','90','65','/upload/gg.jpg','','');
-------------------------------------------------
insert into release values(1,1,'2010-06-01','2010-06-01 19:30');
insert into release values(1,1,'2010-06-01','2010-06-01 21:30');
----插入2-----------------------------------------
insert into release values(3,1,'2010-06-01','2010-06-01 23:50');
---------------------------------------------------
*/
--SELECT * FROM cinemaInfo ci
--SELECT * FROM filmInfo fi
--SELECT * FROM release r
IF OBJECT_ID('[p_test]') IS NOT NULL
DROP PROC [p_test]
GO
CREATE PROC [p_test]
@电影名 varchar(100),
@影厅名 varchar(100),
@放映时间 datetime
AS
IF EXISTS(
SELECT 1
FROM filmInfo a
JOIN cinemaInfo b
ON a.fname = @电影名
AND b.cname = @影厅名
AND EXISTS(
SELECT *
FROM release m
JOIN filmInfo n
ON m.fid = n.fid
WHERE m.cid = b.cid
AND m.fid<>a.fid
AND (
DATEADD(mi, a.[length]+30, @放映时间) BETWEEN rtime AND DATEADD(mi, n.[length]+30, rtime)
OR @放映时间 BETWEEN rtime AND DATEADD(mi, n.[length]+30, rtime)
)
)
)
SELECT '在此时间不能放映' AS 状态
ELSE
SELECT '在此时间可以放映' AS 状态
GO
EXEC [p_test] '钢铁侠2','一号影厅','2010-06-02 1:30:00'
/*
状态
----------------
在此时间不能放映(1 行受影响)
*/
EXEC [p_test] '叶问2','一号影厅','2010-06-01 15:31:00'
/*
状态
----------------
在此时间可以放映(1 行受影响)
*/
我会马上结贴的