• SQL 数据库 存储过程 视图


    一、存储过程

    1、概述

    存储过程是一组编译在单个执行计划中的T-SQL语句

    存储过程:就像函数一样的会保存在数据库中(可编程性)

    存储过程的优点:

    1、允许模块化程序设计

    2、允许更快执行如果某操作需要大量T-SQL代码或需要重复执行,存储过程将比T-SQL批代码的执行要快。将在创建存储过程时对其进行分析和优化,并可以在首次执行该过程后使用该过程的内存中版本。

    3、减少网络流量

    4、一个需要数百行T-SQL代码的操作由一条执行过程代码的单独语句就可实现,而不需要在网络中发送数百行代码。

    5、作为安全机制使用

    2、编写

    创建存储过程:

    create proc JiaFa
    --需要的参数
    @a int,
    @b int
    as
        --存储过程的内容
        declare @c int;
        set @c = @a + @b;
        return @c;
    go
    
    public int JiaFa(int a, int b)
    {
        int c = a+b;
        return c;
    }
    --执行完毕后全部选中,执行创建
    View Code

    执行存储过程:

    declare @f int;
    exec @f = JiaFa 3,5;
    print @f;
    View Code

    二、视图

    1.视图的概述   

       视图其实就是一条查询sql语句,用于显示一个或多个表或其他视图中的相关数据。视图将一个查询的结果作为一个表来使用,因此视图可以被看作是存储的查询或一个虚拟表。视图来源于表,所有对视图数据的修改最终都会被反映到视图的基表中,这些修改必须服从基表的完整性约束,并同样会触发定义在基表上的触发器。(Oracle支持在视图上显式的定义触发器和定义一些逻辑约束)

    2.视图的存储   

       与表不同,视图不会要求分配存储空间,视图中也不会包含实际的数据。视图只是定义了一个查询,视图中的数据是从基表中获取,这些数据在视图被引用时动态的生成。由于视图基于数据库中的其他对象,因此一个视图只需要占用数据字典中保存其定义的空间,而无需额外的存储空间。

    3.视图的作用

          用户可以通过视图以不同形式来显示基表中的数据,视图的强大之处在于它能够根据不同用户的需要来对基表中的数据进行整理。视图常见的用途如下:

    1)通过视图可以设定允许用户访问的列和数据行,从而为表提供了额外的安全控制

    2)隐藏数据复杂性:视图中可以使用连接(join),用多个表中相关的列构成一个新的数据集。此视图就对用户隐藏了数据来源于多个表的事实。 

    3)简化用户的SQL 语句:用户使用视图就可从多个表中查询信息,而无需了解这些表是如何连接的。 

    4)以不同的角度来显示基表中的数据::视图的列名可以被任意改变,而不会影响此视图的基表 

    5)使应用程序不会受基表定义改变的影响::在一个视图的定义中查询了一个包含4 个数据列的基表中的3 列。当基表中添加了新的列后,由于视图的定义并没有被影响,因此使用此视图的应用程序也不会被影响。 

    6)保存复杂查询::一个查询可能会对表数据进行复杂的计算。用户将这个查询保存为视图之后,每次进行类似计算只需查询此视图即可。

    7)逻辑数据独立性::视图可以使应用程序和数据库表在一定程度上独立。如果没有视图,应用一定是建立在表上的。有了视图之后,程序可以建立在视图之上,从而程序与数据库表被视图分割开来。

    用代码创建视图

     

    用鼠标建立视图

    在弹出的页面选择要建立关系的表的名称,

    选择需要的列的名称,并保存取名。

    练习:

    超市购物小票打印

    create proc jinchuhuo
    @code int,
    @shu int
    as
    declare @name varchar(10)
    declare @price decimal(18,2)
    declare @time datetime
    declare @count int
        select @count=COUNT(*) from mendian where scode = @code
        if @count =1
        BEGIN
            if @shu<=(SELECT sshu from mendian where scode=@code)
            BEGIN
            SELECT @name=sname,@price=sprice from mendian where scode=@code        
            insert into xiaopiao VALUES(@name,@price,@shu,@shu*@price,GETDATE())
            UPDATE mendian set sshu=sshu-@shu where scode=@code
            select top 1 * from xiaopiao order by pcode DESC
            END
        
            ELSE
            BEGIN
                print '货物量不够,请及时补充'
                select *from gongying where gcode=(select sgong from mendian where scode=@code) 
            end
        END
        ELSE
            BEGIN
                print '没有此物品'
                
            end
    EXEC jinchuhuo 2,25
    View Code
  • 相关阅读:
    velocity masterplate 第一个程序的运行
    java 关于集合框架
    java 关于>>>位运算
    QCA wifi驱动强制为HT40
    Linux内核调试方法的总结(转载)
    移动端利用webkitbox水平垂直居中
    Under Construction to Beta
    网站自动备份
    writely 邀请?
    Google Carlendar coming ?
  • 原文地址:https://www.cnblogs.com/shadow-wolf/p/6082644.html
Copyright © 2020-2023  润新知