走近复杂数据库计算型软件的设计与制作(4)—函数的设计

简介:
摘要:接着昨天的数据库的数据表的设计,今天叙述函数的设计。
MSSQL中函数的概念和普通的函数的概念有点类似,可以有参数或者没有参数,并且有返回值或者没有返回值,如果对于MSSQL中的函数不是十分了解,建议看一下MSSQL自带的帮助文档,那里面讲述的很明白,如果还不明白,请发信息给我。
在这个程序中,使用到的函数只有一种类型的,就是返回一张包含树形结构信息的表。在上一节的最后描述了这里的函数所使用的视图,即树形结构中包含每个节点信息的视图,以matrixGraph_view视图对应的函数为例,首先描述一下设计的思想。函数传递一个参数S_ID作为根节点,向返回的表中插入根节点的信息,然后依次查找下级的6层节点,每查找一层,都要把相应的信息插入到需要返回的表中,并更新当前已经查找的层数,最终的程序出口是@level=6,循环结束。之后便可以把函数作为一个普通的表或者视图使用,相应的函数如下所示:
create   function getMatrixGraphData(@S_ID int,@level int)returns @ltable table (s_id int,ps_id int,level int,m_id char(30),flag tinyint,result char(30),position int)
as
begin
       declare @cur_level int
       set @cur_level = 0
       insert into  @ltable(s_id,ps_id,level,m_id,result,flag,position) –初始化表
       select @s_id,0,0,m_id,result,enabled,position   ----这里的ps_id设置为0
       from matrixGraph_view
       where s_id=@s_id
      
       set @cur_level = @cur_level + 1
       while @cur_level<=@level
       begin
              insert into  @ltable(s_id,ps_id,level,m_id,result,flag,position)
              select s_id,ps_id,@cur_level,m_id,result,enabled,position
              from matrixGraph_view s        ---定义的视图
              where s.ps_id in (select s_id from @ltable)
                     and s.s_id not in (select s_id from @ltable)  --选择下级节点的条件                                 
               set @cur_level = @cur_level + 1 –导致循环结束的语句
       end
        return
end
go
整个函数没有特别之处,下面介绍一下相应的ASP代码,由于时间的紧迫性,这个项目只要使用ASP开发了,如果有时间我会做成Struts+Spring+Hibernate的。
Asp代码中首先是打开数据库的连接,构造SQL查询语句,执行查询并返回结果到记录集中,然后输出。程序中使用MzTreeView10.js来显示树形结构,MzTreeView10.js要求根节点的上一级节点为,即有aa_0这样的形式,aa代表当前节点,0代表上一级节点,在函数中直接把根节点的上一级节点设置为0,在输出MzTreeView10.jsNode的时候就不用判断是否为第一个节点。下面是完整的Script内部的内容:
<SCRIPT LANGUAGE="JavaScript">
    <!--
    window.tree = new MzTreeView("tree");    
       tree.icons["folder1"]  = "persons1.gif";
       tree.icons["folder0"]  = "persons0.gif";      
       tree.iconsExpand["folder1"] = "persons1.gif";
       tree.iconsExpand["folder0"] = "persons0.gif";
      
    tree.iconsExpand["book"] = "bookopen.gif"; //展开时对应的图片
    tree.setIconPath("../../images/tree/"); //可用相对路径
<%
       sql = "select * from "&funcs&" ( "&s_id&" ,"&level&")"
       'response.Write(sql)
       'response.End()
       set rs = conn.execute(sql)         
       do while not rs.eof       
              rm_id=trim(rs("ps_id"))
              m_id=trim(rs("s_id"))
              position=rs("position")
              flag=trim(rs("flag"))
              node = VBCrLf &"    tree.nodes["""& rm_id &"_"&m_id &"""] = """
              node = node &"text:"&trim(rs("result")) &";icon:folder"&flag&";hint:队列排序:"&position&";"                                               
              response.write node &"""" '生成节点信息
              rs.movenext
         loop
 rs.close
 set rs=nothing
conn.close()
set conn = nothing
%> 
       obj=document.getElementById("tree");
       obj.innerHTML = tree.toString();
       tree.expandAll = function()
          {
            var d = new Date().getTime();
            MzTreeView.prototype.expandAll.call(this);
            alert("全部展开耗时 = "+ (new Date().getTime()-d) +
            毫秒!\r\n有效节点总数 = "+ (this.index));
          }
       tree.expandAll();
-->
</script>
打开页面之后并展开所有的节点,效果如下图所示:
今天就先到这里,明天接着讲述存储过程的设计,如果你能学到一些东西或者指出笔者的一些不足之处,笔者会十分高兴。
本文转自凌辉博客51CTO博客,原文链接http://blog.51cto.com/tianli/42610如需转载请自行联系原作者

lili00okok
相关文章
|
1天前
|
关系型数据库 数据库
Postgres数据库获取绝对值的函数
【5月更文挑战第4天】Postgres数据库获取绝对值的函数
14 6
|
6天前
|
关系型数据库 MySQL Linux
【MySQL-10】数据库函数-案例演示【字符串/数值/日期/流程控制函数】(代码演示&可cv代码)
【MySQL-10】数据库函数-案例演示【字符串/数值/日期/流程控制函数】(代码演示&可cv代码)
【MySQL-10】数据库函数-案例演示【字符串/数值/日期/流程控制函数】(代码演示&可cv代码)
|
8天前
|
存储 负载均衡 容灾
软件体系结构 - 关系数据库(4)分区
【4月更文挑战第27天】软件体系结构 - 关系数据库(4)分区
20 1
|
9天前
|
运维 负载均衡 监控
软件体系结构 - 关系数据库(3)主从架构
【4月更文挑战第26天】软件体系结构 - 关系数据库(3)主从架构
22 0
|
10天前
|
存储 SQL 缓存
软件体系结构 - 关系数据库(2)反规范化
【4月更文挑战第25天】软件体系结构 - 关系数据库(2)反规范化
18 1
|
11天前
|
存储 数据库
软件体系结构 - 关系数据库(1)规范化
【4月更文挑战第24天】软件体系结构 - 关系数据库(1)规范化
21 0
|
14天前
|
存储 SQL 数据库
软件体系结构 - 架构风格(10)数据库系统架构风格
【4月更文挑战第21天】软件体系结构 - 架构风格(10)数据库系统架构风格
30 0
|
16天前
|
存储 SQL Java
软件体系结构 - 嵌入式系统(3)- 嵌入式数据库
软件体系结构 - 嵌入式系统(3)- 嵌入式数据库
11 0
|
7天前
|
SQL 关系型数据库 MySQL
【MySQL-5】DDL的数据库操作:查询&创建&删除&使用(可cv代码+演示图)
【MySQL-5】DDL的数据库操作:查询&创建&删除&使用(可cv代码+演示图)
|
7天前
|
SQL 关系型数据库 MySQL
【MySQL-1】理解关系型数据库&数据的数据模型
【MySQL-1】理解关系型数据库&数据的数据模型