Day 9:(13) 存储过程实训_参考答案
2015-11-23 00:03
423 查看
-- 存储过程实训_参考答案:
-- 1. 创建存储过程pro_exam,显示exam表中的所有记录
create procedure pro_exam as select * from exam
-- 2. 执行存储过程pro_exam
pro_exam
-- 或
execute pro_exam
-- 3. 查栏存储过程pro_exam的定义文本
sp_helptext pro_exam
-- 4. 修改存储过程pro_exam,加密定义文本,并验证
alter procedure pro_exam with encryption as select * from exam
sp_helptext pro_exam
-- 5. 查看存储过程pro_exam的相关性信息
sp_depends pro_exam
-- 6. 查看存储过程pro_exam的目录信息
sp_stored_procedures pro_exam
-- 7. 重命名存储过程pro_exam 为 pro_exam1,并查看
sp_rename pro_exam,pro_exam1
sp_help pro_exam1
-- 8. 删除存储过程pro_exam1
drop procedure pro_exam1
-- 9. 创建一个带有参数的存储过程pro_exam2,该存储过程根据传入的学生编号、课程号显示该学生的考试成绩
create procedure pro_exam2 @tnum char(8),@cnum char(6) as select * from exam where t_number=@tnum and c_number=@cnum
-- 10. 执行存储过程pro_exam2,查看学号为'20040301'课程号为'100101'的成绩
pro_exam2 '20040301','100101'
--或
exec pro_exam2 '20040301','100101'
--或
exec pro_exam2 @tnum='20040301',@cnum='100101'
-- 11. 使用pubs 数据库authors表,创建一个带有参数的存储过程pro_au,该存储过程传入作者所在的州,显示所有这个州的所有作者信息
create procedure pro_au @state char(2) as select * from authors where state=@state
-- 12. 执行存储过程pro_au,查看所有state 为 'CA'州的所有作者信息
pro_au 'CA'
--或
execute pro_au 'CA'
--或
execute pro_au @tnum='CA'
--准备工作:
create table student(
SID int, --学号
SName varchar(20), --姓名
enterDate datetime, --入学日期
job varchar(10), --职位
high numeric(8,2), --身高
teacherID int, --班主任代号
classID int) --班级编号
-- 13. 创建存储过程add_student1 向已经存在的student表,
-- 插入数据学号、姓名、入学日期、职位、身高、班主任代号、班级编号
CREATE PROCEDURE add_student1
@SID int,@SName varchar(20),@enterDate datetime,@job varchar(10),@high numeric(8,2),@teacherID int,@classID int
AS
INSERT INTO student VALUES(@SID,@SName,@enterDate,@job,@high,@teacherID,@classID)
-- 14. 执行存储过程add_student1插入数据 1,'zhangsan','20100901','monitor',180,101,1001
add_student1 1,'zhangsan','20100901','monitor',180,101,1001
select * from student
-- 15. 创建存储过程add_student2 向已经存在的student表,
-- 插入数据学号、姓名、入学日期、职位、身高、班级编号
CREATE PROCEDURE add_student2
@SID int,@SName varchar(20),@enterDate datetime,@job varchar(10),@high numeric(8,2),@classID int
AS
INSERT INTO student(SID,SName,enterDate,job,high,classID) VALUES(@SID,@SName,@enterDate,@job,@high,@classID)
-OR
CREATE PROCEDURE add_student3
@SID int,@SName varchar(20),@enterDate datetime,@job varchar(10),@high numeric(8,2),@classID int
AS
INSERT INTO student VALUES(@SID,@SName,@enterDate,@job,@high,null,@classID)
-- 16. 执行存储过程add_student2插入数据 2,'lisi','20100901','member',165,1001
add_student2 2,'lisi','20100901','member',165,1001
--OR
add_student2 3,'wangwu','20100901','member',170,1001
select * from student
-- 使用存储过程自动生成数据练习:
-- 创建表t_card
create table t_card
(
card_id bigint not null,--卡号 起始值223310001001 卡号连续
card_password int, --卡密码 随机六位数字
card_status char(1), --卡状态 0 为未使用
expire_date datetime, --截止日期 建卡3年后
batchid int --批号 起始值 1001
)
-- 利用存储过程自动生成数据
-- 一次生成一个批次的多个卡号
create procedure P_generatecard
as
begin
declare @bid int,@cid bigint,@j int
select @bid = isnull(max(batchid),1000),@cid = isnull(max(card_id),223310001000) from dbo.t_card
set @j = 1
while @j<=50
begin
insert into dbo.t_card values(@cid+@j,convert(int,rand()*899999)+100000,'0',dateadd(yy,3,getdate()),@bid+1)
set @j = @j + 1
end
end
P_generatecard
select * from dbo.t_card
-- 一次批量生成多个批次
create
alter procedure P_generatecard1
as
begin
declare @bid int,@cid bigint,@i int,@j int
select @bid = isnull(max(batchid),1000) from dbo.t_card
set @i = 1
while @i <= 5
begin
select @cid = isnull(max(card_id),223310001000) from dbo.t_card
set @j = 1
while @j <= 50
begin
insert into dbo.t_card values(@cid+@j,convert(int,rand()*899999)+100000,'0',dateadd(yy,3,getdate()),@bid+@i)
set @j = @j + 1
end
set @i = @i + 1
end
end
P_generatecard1
select * from dbo.t_card
-- 批量生成指定批次、卡数量/批次
create
--alter
procedure P_generatecard2 @dnum int,@cnum int
as
begin
declare @bid int,@cid bigint,@i int,@j int
select @bid = isnull(max(batchid),1000) from dbo.t_card
set @i = 1
while @i <= @dnum
begin
select @cid = isnull(max(card_id),223310001000) from dbo.t_card
set @j = 1
while @j <= @cnum
begin
insert into dbo.t_card values(@cid+@j,convert(int,rand()*899999)+100000,'0',dateadd(yy,3,getdate()),@bid+@i)
set @j = @j + 1
end
set @i = @i + 1
end
end
P_generatecard2 5,500
select * from dbo.t_card
/* 以下不做
-- 17. 使用northwind 数据库order details表,创建一个带参数的存储过程pro_sale
-- 该存储过程根据传入的订单号、产品号,计算销售额(=unitprice*quantity*(1-discount))
-- 根据程序执行结果返回不同的值,程序成功返回0,程序失败返回错误号
select * from [order details]
CREATE
alter PROCEDURE pro_sale @oid int,@pid int ,@sale decimal(10,2)output
AS
declare @errorvalue int
set @errorvalue=0
select @sale=unitprice*quantity*(1-discount) from [order details] where @oid=orderid and @pid=productid
if (@@ERROR<>0)
set @errorvalue=@@ERROR
return @errorvalue
-- 18. 执行存储过程pro_sale,计算订单号为10248产品号为11的销售额
declare @returnvalue int,@oid int,@pid int,@sale decimal(10,2)
select @oid=10248,@pid=11
execute @returnvalue=pro_sale @oid,@pid,@sale output
select @returnvalue as '返回是否出错'
select @sale as '销售额'
*/
-- 1. 创建存储过程pro_exam,显示exam表中的所有记录
create procedure pro_exam as select * from exam
-- 2. 执行存储过程pro_exam
pro_exam
-- 或
execute pro_exam
-- 3. 查栏存储过程pro_exam的定义文本
sp_helptext pro_exam
-- 4. 修改存储过程pro_exam,加密定义文本,并验证
alter procedure pro_exam with encryption as select * from exam
sp_helptext pro_exam
-- 5. 查看存储过程pro_exam的相关性信息
sp_depends pro_exam
-- 6. 查看存储过程pro_exam的目录信息
sp_stored_procedures pro_exam
-- 7. 重命名存储过程pro_exam 为 pro_exam1,并查看
sp_rename pro_exam,pro_exam1
sp_help pro_exam1
-- 8. 删除存储过程pro_exam1
drop procedure pro_exam1
-- 9. 创建一个带有参数的存储过程pro_exam2,该存储过程根据传入的学生编号、课程号显示该学生的考试成绩
create procedure pro_exam2 @tnum char(8),@cnum char(6) as select * from exam where t_number=@tnum and c_number=@cnum
-- 10. 执行存储过程pro_exam2,查看学号为'20040301'课程号为'100101'的成绩
pro_exam2 '20040301','100101'
--或
exec pro_exam2 '20040301','100101'
--或
exec pro_exam2 @tnum='20040301',@cnum='100101'
-- 11. 使用pubs 数据库authors表,创建一个带有参数的存储过程pro_au,该存储过程传入作者所在的州,显示所有这个州的所有作者信息
create procedure pro_au @state char(2) as select * from authors where state=@state
-- 12. 执行存储过程pro_au,查看所有state 为 'CA'州的所有作者信息
pro_au 'CA'
--或
execute pro_au 'CA'
--或
execute pro_au @tnum='CA'
--准备工作:
create table student(
SID int, --学号
SName varchar(20), --姓名
enterDate datetime, --入学日期
job varchar(10), --职位
high numeric(8,2), --身高
teacherID int, --班主任代号
classID int) --班级编号
-- 13. 创建存储过程add_student1 向已经存在的student表,
-- 插入数据学号、姓名、入学日期、职位、身高、班主任代号、班级编号
CREATE PROCEDURE add_student1
@SID int,@SName varchar(20),@enterDate datetime,@job varchar(10),@high numeric(8,2),@teacherID int,@classID int
AS
INSERT INTO student VALUES(@SID,@SName,@enterDate,@job,@high,@teacherID,@classID)
-- 14. 执行存储过程add_student1插入数据 1,'zhangsan','20100901','monitor',180,101,1001
add_student1 1,'zhangsan','20100901','monitor',180,101,1001
select * from student
-- 15. 创建存储过程add_student2 向已经存在的student表,
-- 插入数据学号、姓名、入学日期、职位、身高、班级编号
CREATE PROCEDURE add_student2
@SID int,@SName varchar(20),@enterDate datetime,@job varchar(10),@high numeric(8,2),@classID int
AS
INSERT INTO student(SID,SName,enterDate,job,high,classID) VALUES(@SID,@SName,@enterDate,@job,@high,@classID)
-OR
CREATE PROCEDURE add_student3
@SID int,@SName varchar(20),@enterDate datetime,@job varchar(10),@high numeric(8,2),@classID int
AS
INSERT INTO student VALUES(@SID,@SName,@enterDate,@job,@high,null,@classID)
-- 16. 执行存储过程add_student2插入数据 2,'lisi','20100901','member',165,1001
add_student2 2,'lisi','20100901','member',165,1001
--OR
add_student2 3,'wangwu','20100901','member',170,1001
select * from student
-- 使用存储过程自动生成数据练习:
-- 创建表t_card
create table t_card
(
card_id bigint not null,--卡号 起始值223310001001 卡号连续
card_password int, --卡密码 随机六位数字
card_status char(1), --卡状态 0 为未使用
expire_date datetime, --截止日期 建卡3年后
batchid int --批号 起始值 1001
)
-- 利用存储过程自动生成数据
-- 一次生成一个批次的多个卡号
create procedure P_generatecard
as
begin
declare @bid int,@cid bigint,@j int
select @bid = isnull(max(batchid),1000),@cid = isnull(max(card_id),223310001000) from dbo.t_card
set @j = 1
while @j<=50
begin
insert into dbo.t_card values(@cid+@j,convert(int,rand()*899999)+100000,'0',dateadd(yy,3,getdate()),@bid+1)
set @j = @j + 1
end
end
P_generatecard
select * from dbo.t_card
-- 一次批量生成多个批次
create
alter procedure P_generatecard1
as
begin
declare @bid int,@cid bigint,@i int,@j int
select @bid = isnull(max(batchid),1000) from dbo.t_card
set @i = 1
while @i <= 5
begin
select @cid = isnull(max(card_id),223310001000) from dbo.t_card
set @j = 1
while @j <= 50
begin
insert into dbo.t_card values(@cid+@j,convert(int,rand()*899999)+100000,'0',dateadd(yy,3,getdate()),@bid+@i)
set @j = @j + 1
end
set @i = @i + 1
end
end
P_generatecard1
select * from dbo.t_card
-- 批量生成指定批次、卡数量/批次
create
--alter
procedure P_generatecard2 @dnum int,@cnum int
as
begin
declare @bid int,@cid bigint,@i int,@j int
select @bid = isnull(max(batchid),1000) from dbo.t_card
set @i = 1
while @i <= @dnum
begin
select @cid = isnull(max(card_id),223310001000) from dbo.t_card
set @j = 1
while @j <= @cnum
begin
insert into dbo.t_card values(@cid+@j,convert(int,rand()*899999)+100000,'0',dateadd(yy,3,getdate()),@bid+@i)
set @j = @j + 1
end
set @i = @i + 1
end
end
P_generatecard2 5,500
select * from dbo.t_card
/* 以下不做
-- 17. 使用northwind 数据库order details表,创建一个带参数的存储过程pro_sale
-- 该存储过程根据传入的订单号、产品号,计算销售额(=unitprice*quantity*(1-discount))
-- 根据程序执行结果返回不同的值,程序成功返回0,程序失败返回错误号
select * from [order details]
CREATE
alter PROCEDURE pro_sale @oid int,@pid int ,@sale decimal(10,2)output
AS
declare @errorvalue int
set @errorvalue=0
select @sale=unitprice*quantity*(1-discount) from [order details] where @oid=orderid and @pid=productid
if (@@ERROR<>0)
set @errorvalue=@@ERROR
return @errorvalue
-- 18. 执行存储过程pro_sale,计算订单号为10248产品号为11的销售额
declare @returnvalue int,@oid int,@pid int,@sale decimal(10,2)
select @oid=10248,@pid=11
execute @returnvalue=pro_sale @oid,@pid,@sale output
select @returnvalue as '返回是否出错'
select @sale as '销售额'
*/
相关文章推荐
- Android之获取手机上的图片和视频缩略图thumbnails
- 数据库链接字符串查询网站
- DB2实例管理
- DB2实例管理
- 保障MySQL数据安全的14个最佳方法
- mysql问答汇集
- 创建一个空的IBM DB2 ECO数据库的方法
- Access 2000 数据库 80 万记录通用快速分页类
- 开通一个数据库失败的原因的和解决办法
- 一个简单的asp数据库操作类
- CentOS下DB2数据库安装过程详解
- EasyASP v1.5发布(包含数据库操作类,原clsDbCtrl.asp)第1/2页
- sql2008 还原数据库解决方案
- Oracle 数据库自动存储管理-安装配置
- Oracle 数据库 临时数据的处理方法
- 数据库分页查询语句数据库查询
- 最近比较流行的数据库挂马
- Oracle 手动创建数据库步骤详解
- 分割超大Redis数据库例子