Chinaunix首页 | 论坛 | 博客
  • 博客访问: 102042
  • 博文数量: 27
  • 博客积分: 1132
  • 博客等级: 少尉
  • 技术积分: 278
  • 用 户 组: 普通用户
  • 注册时间: 2009-07-22 13:56
文章分类

全部博文(27)

文章存档

2011年(1)

2010年(18)

2009年(8)

分类: 数据库开发技术

2010-04-16 21:54:21

这两天一直在做自己的毕业设计,好好的练习了下数据库的编程知识,现将自己在编程中遇到的一些数据库编程记录如下,因为涉及到数据库中的数据处理,积累了点关于游标的知识,现将这两天的编程知识归纳如下。

先来看一个游标嵌套的一般程序例子,如下:  

  declare   my_cur1   cursor   for    

      select   ...  

  open   my_cur1  

  fetch   next   from   my_cur1   into   @tablestring       

  while   @@FETCH_STATUS   =   0  

  begin                               ...  

      declare   my_cur2   cursor   for  

      select   ...

 

      open   my_cur2  

      fetch   next   from   my_cur2   into   @columnstring  

      while   @@FETCH_STATUS   =   0  

      begin 

               ...

              fetch   next   from   columns_cur   into   @columnstring  

        end  

       close   my_cur2  

       deallocate   my_cur2 

  fetch   next   from   my_cur1   into   @tablestring    

  end

  close   my_cur1  

  deallocate   my_cur1

 

由上可以看到,@@FETCH_STATUS 在程序中使用了两次,它是两个游标共同拥有的,只要其中一个游标被提取了,这个提取成功与否的状态就会保存到@@FETCH_STATUS中,

即它是反映当前游标是否成功返回的标志。

现将自己编程当中用到的一个小的应用贴出如下:

描述:

现有一张维修服务单,其字段如下:    

字段名

字段名称

字段类型

约束

备注

wxfwdbh

维修服务单编号

Char(14)

 

 

wxjhdbh

维修计划单编号

Char(14)

 

 

wxfzr

维修负责人

Varchar(10)

 

 

wxry

维修人员

Varchar(10)

 

 

wxzt

维修状态

Varchar(10)

 

审核中,维修处理中,维修异常,维修完成

gzbh

故障编号

Char(10)

 

 

gzbwbh

故障部位编号

Char(10)

 

 

yybh

原因编号

Char(10)

 

 

wxksrq

维修开始日期

Datetime

 

 

wxbjxdbh

维修备件详单编号

Char(10)

 

有维修备件详单子表

bz

备注

text

 

备注

然后,在故障现象表,故障原因表,故障部位表,维修详单表中记录了故障现象编号及故障现象,故障原因编号及故障原因,故障部位编号及故障原因和维修所需要的备件详单编号及备件,及维修服务单与故障现象表,故障原因表,故障部位表,维修详单表是一对多的关系,它们的结构如下:

故障现象表:

字段名

字段名称

字段类型

约束

备注

gzbh

故障编号

Char(10)

 

 

gzxxbh

故障现象编号

Char(10)

 

 

故障原因表

字段名

字段名称

字段类型

约束

备注

yybh

原因编号

Char(10)

 

 

gzyybh

故障原因编号

Char(10)

 

 

其余两个表故障部位表,维修详单表省略

还有就是基础数据信息表:

基础故障现象信息表:

字段名

字段名称

字段类型

约束

备注

gzxxbh

故障现象编号

Char(10)

主键

 

gzxxmc

故障现象名称

Varchar(50)

 

 

基础故障原因信息表:

字段名

字段名称

字段类型

约束

备注

gzyybh

故障原因编号

Char(10)

主键

 

gzyymc

故障原因名称

Varchar(50)

 

 

目前的任务是,根据维修服务单,将故障现象,故障原因,故障部位,均以名称显示出来,并存储到另一张表中。

格式如下:

维修服务单编号          故障现象名称             故障部位名称    故障原因信息

WXFW2010022301     排烟颜色不正常,发动困难,换挡有异声     油箱,离合器    化油太稀,化油太稀

这里的名称,由于是数据库中一条一条记录读出,需要组合而成,所以用到了有关游标的知识,故将此应用的游标程序贴出如下:(主要是存储过程)

create proc pro_gzyyfx

as

begin 

    declare @wxfwdbh char(14)

    declare @gzbh char(10)

    declare @gzxxbh char(10)

    declare @gzxx varchar(100)

    declare @gzbwbh char(10)

    declare @gzbw varchar(100)

    declare @gzyybh char(10)

    declare @gzyy varchar(100)

    declare @bwbh char(6)

   

    truncate table WXGL.WXGL_gzyyfx

 

   --声明游标my_cursor1读取wxfwdbh信息

    declare my_cursor1 cursor scroll dynamic

       for select wxfwdbh from WXGL.WXGL_wxfwd_table

    open my_cursor1  

    fetch next from my_cursor1 into @wxfwdbh

    while(@@fetch_status = 0)

      begin

       set @gzxx=''

       set @gzbw=''

       set @gzyy=''

 

        --声明游标my_cursor2读取故障现象

       declare my_cursor2 cursor scroll dynamic

           for (select C.gzxxbh from WXGL.WXGL_wxfwd_table A,WXGL.WXGL_gzbh_gzxx_table B,WXGL.WXGL_gzxxxx_table C

               where A.gzbh=B.gzbh and B.gzxxbh=C.gzxxbh and A.wxfwdbh=@wxfwdbh)

       open my_cursor2

        fetch next from my_cursor2 into @gzxxbh

       while(@@fetch_status = 0)

         begin

           set @gzxx=(@gzxx+(select gzxxmc from WXGL.WXGL_gzxxxx_table where gzxxbh=@gzxxbh)+'')

           fetch next from my_cursor2 into @gzxxbh

          end

       close my_cursor2

       deallocate my_cursor2

 

        --声明游标my_cursor3读取故障部位

       declare my_cursor3 cursor scroll dynamic

           for (select C.bwbh from WXGL.WXGL_wxfwd_table A,WXGL.WXGL_gzbwbh_gzbw_table B,WXGL.WXGL_clbwxx_table C

               where A.gzbwbh=B.gzbwbh and B.bwbh=C.bwbh and A.wxfwdbh=@wxfwdbh)

       open my_cursor3

        fetch next from my_cursor3 into @bwbh

       while(@@fetch_status = 0)

         begin

           set @gzbw=(@gzbw+(select bwmc from WXGL.WXGL_clbwxx_table where bwbh=@bwbh)+'')

           fetch next from my_cursor3 into @bwbh

          end

       close my_cursor3

       deallocate my_cursor3

 

        --声明游标my_cursor4读取故障现象

       declare my_cursor4 cursor scroll dynamic

           for (select C.gzyybh from WXGL.WXGL_wxfwd_table A,WXGL.WXGL_yybh_gzyy_table B,WXGL.WXGL_gzyyxx_table C

               where A.yybh=B.yybh and B.gzyybh=C.gzyybh and A.wxfwdbh=@wxfwdbh)

       open my_cursor4

        fetch next from my_cursor4 into @gzyybh

       while(@@fetch_status = 0)

         begin

           set @gzyy=(@gzyy+(select gzyymc from WXGL.WXGL_gzyyxx_table where gzyybh=@gzyybh)+'')

           fetch next from my_cursor4 into @gzxxbh

          end

       close my_cursor4

       deallocate my_cursor4

 

       insert into WXGL.WXGL_gzyyfx(wxfwdbh,gzxx,gzbw,gzyy)values(@wxfwdbh,@gzxx,@gzbw,@gzyy)

        fetch next from my_cursor1 into @wxfwdbh

      end

    close my_cursor1

    deallocate my_cursor1

end

 

到此为止吧,就写这么多,很基础的,供大家入门参考学习。

阅读(1573) | 评论(0) | 转发(0) |
0

上一篇:又是周末

下一篇:一个插入排序

给主人留下些什么吧!~~