数据库:存储过程实验

article/2025/11/5 22:21:10

一、实验目的及要求

目的

掌握存储过程的编写与调用

要求

掌握存储过程的编写;掌握存储过程的调用

二、实验条件

安装有SQL Server2014数据库的计算机

三、实验内容

使用事务、锁和游标;编写和使用存储过程;使用触发器

四、实验结果

1.使用事务方式往院系表(t_department)中添加院系信息。信息分别为:(1)04,电器工程系,伏特;(2)04,机械工程系,墨子。要求两条记录同时添加,若错误则回滚,最后查询当前院系表中的数据信息。注意要查看输出的结果信息和消息信息。

参考代码:

use EMISE

go

begin tran mytran

insert into t_department values('04','电器工程系','欧姆')

insert into t_department values('04','机械工程系','墨子')

if @@ERROR>0

rollback tran mytran

else

commit tran mytran

select *from t_department

 

查看结果:

uploading.4e448015.gif正在上传…重新上传取消

查看信息:

 

uploading.4e448015.gif正在上传…重新上传取消

 

2.把题目 1 中的数据改为(1)04,电器工程系,伏特;(2)05,机械工程系,墨子;再次运行代码,查看结果和消息。

结果:

uploading.4e448015.gif正在上传…重新上传取消

 

消息:

uploading.4e448015.gif正在上传…重新上传取消

 

3.使用存储过程中定义事务实现银行转账业务处理。

use master

go

if DB_ID('bankdb') is not null

drop database bankdb;

go

create database bankdb

go

use bankdb

go

create table account(

id int identity(1,1) primary key,

cardno char(20) unique not null,

balance numeric(18,2)

)

go

insert into account values('01',100.0)

insert into account values('02',200.0)

insert into account values('03',300.0)

go

--创建存储过程

create procedure sp_transfer_money

@out_cardno char(20),

@in_cardno char(20),

@money numeric(18,2)

as

begin

declare @remain numeric(18,2)

select @remain=balance from account where cardno=@out_cardno

if @money>0

if @remain>=@money --余额足够

begin

begin tran t1

update account set balance=balance-@money where cardno=@out_cardno

update account set balance=balance+@money where cardno=@in_cardno

if @@error>0

begin ---wrong

rollback tran t1

return 0

end

else

begin ---right

commit tran t1

print '转账成功!'

end

end

else ---余额少

begin

print '余额不足'

end

else --- 转账金额小于0

print '转账金额应大于0!'

end

go

exec sp_transfer_money '01','02',50

uploading.4e448015.gif正在上传…重新上传取消

 

4.在SQL Server中查看数据库中的锁。

(1)使用快捷键“Ctrl+2”查看锁的信息。

打开SQL Server2014的SSMS,在查询分析器中使用快捷键“Ctrl+2”,即可看到进程、锁已经对象等信息,如下图所示:

uploading.4e448015.gif正在上传…重新上传取消

 

(2)使用系统存储过程sp_lock来查看数据库中的锁。

在新建查询的编辑区内,键入“EXEC sp_lock”,执行这个命令也可以查看当前数据库中的锁。

EXEC sp_lock

uploading.4e448015.gif正在上传…重新上传取消

 

5.使用表级锁。在 SQL Server 中模拟两个用户对表进行操作,其中一个用户查看学生表信息,并锁定 20ms;另一个用户也查看学生表,并要更新其中的数据。

(1)创建一个新的查询窗口,在编辑区窗口内键入如下代码,并保存为user1_lock.sql。

use EMISE

go

begin tran t1

declare @sd_time varchar(8)

select *from t_student with(holdlock)

select @sd_time=convert(varchar,getdate(),8)

print '用户1锁定时间为:'+@sd_time

waitfor delay '00:00:20'

select @sd_time=convert(varchar,getdate(),8)

print '用户1锁定时间为:'+@sd_time

commit tran t1

uploading.4e448015.gif正在上传…重新上传取消

 

(2)创建一个新的查询窗口,在编辑区窗口键入如下代码,并保存为user2_update.sql。

use EMISE

go

begin tran t2

declare @sd_time varchar(8)

--select *from t_student with(holdlock)

select @sd_time=convert(varchar,getdate(),8)

print '用户2开始时间为:'+@sd_time

select *from t_student

select @sd_time=convert(varchar,getdate(),8)

print '用户2执行查询的时间为:'+@sd_time

update t_student set name='wang' where name='王庆子'

select @sd_time=convert(varchar,getdate(),8)

print '用户2更新数据的时间为:'+@sd_time

commit tran t2

uploading.4e448015.gif正在上传…重新上传取消

 

 

 


http://chatgpt.dhexx.cn/article/nJcbCVZv.shtml

相关文章

达梦数据库存储过程注意事项

引言:达梦数据库是一款国产数据库,在语法使用和函数方面和MySQL,Oracle有着很多相似的地方。但是也有一 些细微的区别。 1、先看一下达梦数据库的存储过程模板: CREATE OR REPLACE FUNCTION getName() AS OR IS DECLARE ... BEGI…

MySQL数据库-存储过程详解

存储过程简单来说,就是为以后的使用而保存的一条或多条MySQL语句的集合。可将其视为批件,虽然它们的作用不仅限于批处理。在我看来, 存储过程就是有业务逻辑和流程的集合, 可以在存储过程中创建表,更新数据&#xff0c…

EXTJS5 入门指南

EXTJS5带领EXTJS步入了新的时代,Ext JS 5已经不再支持IE6、IE7和其他旧版本的浏览器了,这样可以显著减少跨整个框架的逻辑和样式设置。再加上额外的优化,Ext JS 5已经为企业级的Web应用程序迈出了惊人的一步。 EXTJS5不在和EXTJS4一样&#x…

ExtJS-入门(转载自http://www.blogjava.net/puras/archive)

2010 - 01 - 13 缩略显示 ExtJS-入门(转载自http://www.blogjava.net/puras/archive) 文章分类:Web前端 在ExtJS里最常用的,应该就是Ext.onReady这个方法了, 而且它也可能是你学习ExtJS所接触的第一个方法,这个方法在当前的DOM加载完毕后自动调用,保证…

Ext JS 6学习文档–第1章–ExtJS入门指南

Ext JS 入门指南 前言 本来我是打算自己写一个系列的 ExtJS 6 学习笔记的,因为 ExtJS 6 目前的中文学习资料还很少。google 搜索资料时找到了一本国外牛人写的关于 ExtJS 6 的电子书 [Ext JS 6 By Example]。这份资料在 PACKT 上卖 35.99 刀的,当然了万…

Extjs——初步学习

最近在系统学习Extjs框架,从刚一开始接触Extjs到现在发现对Extjs越来越喜欢了。刚开始只是想在页面上实现一个展示大量图片的功能,就像在线订餐系统展示菜单的效果那样,每幅图片上都有一些必要的信息、动作、链接等。效果如下图: …

Extjs基础(一)

1.1基础学习 说明: 本示例的所有代码均在extjs6.2版本上测试通过,学习内容来源于官方文档和自己的一些见解。 1.1.1window组件 简单的一个window面板: title: 窗口标题,height: 220, //可以使用百分比width: 220, html: 内容部分,resizable: true, //…

ExtJS基础入门

公司需要用ExtJS搭建系统框架,然后,这个很老了,没有用过 。 开始进行时候一脸懵逼,因为搜索了相关的知识,面临如下问题: 1.版本太多,从一到六,不知从何入手 2.提供的教程和视频都…

extjs初学者教程

layout 1.面板 (1)类结构 Ext.Base Ext.AbstractComponent Ext.Component Ext.container.AbstractContainer Ext.container.Container Ext.panel.AbstractPanel …

ext.js入门

序言:extjs 是一种OOP语言,可以按照学习Java 的过程来进行学习,可以类比 Java中的图像界面JWT来进行学习。 工具 这些是sencha提供的用于Ext JS应用程序开发的工具,主要用于生产级别。Sencha Cmd Sencha CMD是一个提供Ext JS代码…

EXTJS入门教程及其框架搭建

EXTJS是一个兼容AJAX的前台WEB UI的框架,在普通的HTML文件的 BODY 元素中无须写任何HTML代码,就能产生相应的表格等元素。 原创不易,转载请注明出处:EXTJS入门教程及其框架搭建 代码下载地址:http://www.zuidaima.com/share/17244…

EXTJS详细教程

布局和容器 普通布局 Ext.create(Ext.panel.Panel, {renderTo: Ext.getBody(),width: 400,height: 300,title: Container Panel,items: [{xtype: panel,title: Child Panel 1,height: 100,width: 75%}, {xtype: panel,title: Child Panel 2,height: 100,width: 75%}] });列布…

国嵌视频,买了就是坑

国嵌买视频的,更新慢,谁敢抱怨,踢你,锁你账号,真无语,安卓没录完,3月拖到6月,拖到10月,引起公愤了,就说送路由视频,结果路由视频还没录呢&#xf…

【我爱嵌入式】

童鞋们 自动化嵌入式复习 总结了期末考试简答题的内容 第一章 嵌入式的定义 以应用为中心,以计算机技术为基础,软硬件可裁剪,对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。嵌入式系统主要由嵌入式微处理器、外围硬件设备…

嵌入式教程:什么是嵌入式?

每每有小白接触嵌入式时,总认为是装修风格的一种,类似嵌入式壁炉之类的,而一些有过了 解的朋友可能会以为嵌入式教程就是教单片机的,学习后才发现单片机只是基础。 简单来说,嵌入式就是需要嵌入某些东西里面&#xff…

国嵌视频学习笔记---linux内核开发1

一、linux内核简介 1.linux系统由两部分组成:内核空间和用户空间。 2.用户空间包括:用户应用程序和C库 3.内核空间包括:系统调用接口、内核和体系结构相关代码。 4.ARM处理器7种工作模式:用户模式,快速中断模式、外…

国嵌学习——ARM

从NOR启动:在片选0位置放置的是2M的nor flash,在片选6位置放置的是内存0x30000000 ARM工作模式 ARM处理器的运行模式可以通过软件改变,也可以通过外部中断或异常处理改变。应用程序运行在用户模式下,当处理器运行在用户模式下时&…

国嵌C语言(6-10)

国嵌六: 空结构体的内存: struct D {}; int main(void) {struct D d1;struct D d2;printf("%d\n",sizeof(struct D));printf("%d,%0x\n",sizeof(d1),&d1);printf("%d,%0x\n",sizeof(d2),&d2); } 0 0&#xff…

【嵌入式】

一.进制转换:分别有以下前缀,2进制常用0B表示,8进制常用0O,16进制常用0X表示;1位八进制数等于3位二进制数,1位十六进制数等于4位二进制数,在二进制转化为八,十六进制数时。如果位数不…

关于嵌入式系统

说实话,笔者是对嵌入式有兴趣的,为什么,因为对于我这样的懒人,是希望以后出去找个稳定的工作,随着年龄的增长工资越高,经验越多,就越吃香,而不是当个最底层的码农,35岁之…