首页 新闻 搜索 专区 学院

急求解决sql触发器和存储过程问题。

0
悬赏园豆:20 [待解决问题]

我要在数据库中实现一个功能:查询每个航班的预定情况、统计航班的满座率,旅客能够退订机票;旅客进行机票预定时,输入旅客基本信息,系统为旅客安排航班;

我写的代码如下:

create database 机票预订系统
use  机票预订系统
go

--创建航班信息表
create table 航班信息
(
航班号 char(20)primary key,
起飞时间 char(20) not null,
到达时间  char(20) not null,
出发地   char(30)not null,
目的地  char(30)not  null
)

--创建机票信息表
create table 机票信息
(
航班号 char(20),
座位号 int,
座位信息 char(2) not null,
机票类型 varchar(50) not null,
机票价格  int not null,
primary key(航班号,座位号)
)
alter table 机票信息
 add constraint 已订座位信息
 check (座位信息 in('有','无'))
 
  --创建旅客信息表
create table 旅客信息
(
旅客姓名 varchar(10) not null,
身份证号 varchar(50) primary key,
性别  char(10) check (性别 in('男','女')),
电话  char(20)not null
)

--创建订、取票信息表
create table 取票信息
(
旅客姓名 varchar(10) not null,
身份证号 varchar(50),
航班号   char(20),
座位号 int not null,
取票时间 char(20) not null,
订单号  varchar(20) not null,
primary key(航班号,身份证号)
)


--创建退票信息表
create table  退票信息
(
旅客姓名  varchar(10) not null,
订单号    varchar(20) primary key ,
身份证号  varchar(50),
电话  char(20) not null
)


--插入信息
insert into 航班信息 (航班号,起飞时间,到达时间,出发地,目的地)
   values ('20131217','12-17-17:13','12-17-17:18','北京','广州')
   
   
--创建订票触发器

create trigger 订票 on 取票信息 for insert
as
begin
create table 旅客订票
(
旅客姓名 char(10),
航班号 char(20)
)
insert into 旅客订票(旅客姓名,航班号) select 旅客姓名,航班号 from 取票信息
end

--订票触发事件
create trigger 退票 on 取票信息 for delete
as
begin
 declare @订单号1 varchar(20)
 select @订单号1=订单号 from 取票信息
 delete from 退票信息 where 订单号=@订单号1
 end
 
 
 --创建存储过程
create proc 航班
@旅客姓名 char(10),
@航班号  char(20) output,
@座位号  int  output
as
begin
select *from 取票信息 where 旅客姓名=@旅客姓名
select @航班号=航班号 from 取票信息 where 旅客姓名=@旅客姓名
select @座位号=座位号 from 取票信息 where 旅客姓名=@旅客姓名
end

--执行存储过程
declare @x char(10),@y int
execute 航班'张三',@x output ,@y output
select @x as 航班号 , @y as 座位号

边缘者的主页 边缘者 | 初学一级 | 园豆:179
提问于:2013-12-19 09:43
< >
分享
所有回答(2)
0

取票信息,旅客订票,退票信息 是否可以统一为 订单信息 呢

 

触发器和存储过程有什么冲突?

Yu | 园豆:12980 (专家六级) | 2013-12-19 10:26

这几张表要求不能统一

需要通过表的级联  以及触发器去实现上述功能

支持(0) 反对(0) 边缘者 | 园豆:179 (初学一级) | 2013-12-19 10:32
0

所谓的触发器:让开发人员偷懒,满足条件就自动执行.

最简单的方案         建议做一个触发流程图.用事务完成.直接写在代码里面.

 

[秦时明月] | 园豆:598 (小虾三级) | 2013-12-19 13:24
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册