文档库 最新最全的文档下载
当前位置:文档库 › 12第十二讲 存储过程

12第十二讲 存储过程

12第十二讲 存储过程
12第十二讲 存储过程

第十二讲存储过程

存储过程(Stored Procedure)就是将常用的或很复杂的工作,预先以SQL 程序写好,然后指定一个程序名称保存起来,以后只要使用EXECUTE命令就可以执行这个程序,即可自动完成该项工作。

12.1 存储过程简介

12.1.1 存储过程的优点

存储过程可以包含数据存取语句、流称控制语句、错误处理语句等,弹性较大。其优点有:

(1) 执行效率高:SQL SERVER会预先将存储过程编译成一个执行计划并保存起来,如此可以提高执行的速度。来提高SQL SERVER的运作效率。(2) 统一的操作流程:可以将复杂的工作制做成存储过程,如此除了节省人力操作的时间外,也可以维持统一的数据操作流程,并避免用户误操作。(3) 重复使用:存储过程还可以模块化的重复使用

(4) 安全性:当数据表需要保密数据时,我们可以利用存储过程来作为数据存取的管道。

12.1.2 存储过程种类

(1)系统存储过程(System stored procedures):

系统存储过程一律以sp_开头,此类存储过程为SQL SERVER内置的存储过程,通常是用来进行系统的各项设置、读取或执行相关的管理工作。

Sp的意义:当执行以sp开头的存储过程时,系统会优先到master数据库中寻找该存储过程来执行。也就是说,我们无论在哪个数据库中,都可以直接执行存储放在 master 中并以sp开头的存储过程。

(2)扩展存储过程(Extended stroed procedure):

扩展存储过程通常是以xp_开头,例如” xp_sendmail ” 此类存储过程大多是以传统程序(例如C++)编写而成,其内容不是保存在SQL SERVER中,而是以DLL的形式存在。它是SQL SERVER的外挂程序,它可以扩充SQL SERVER 的功能。

SQL SERVER的系统存储过程超过500个,都是存放在master数据库中。(3)用户自定义的存储过程(User-defined stored procedures):

自己设计的存储过程,其名称可以任意取,但最好不要以sp_或xp_开头。自定义的存储过程会被放入所属数据库的存储过程项目中,并以对象的形式保存。

12.2 存储过程的建立、使用与修改

12.2.1 用SQL 语言建立存储过程

使用CREATE PROCEDURE语句建立存储过程,语法格式如下:

CREATE PROC [ EDURE ] procedure_name [ ; number ]

[ { @parameter data_type }

[ V ARYING ] [ = default ] [ OUTPUT ]

] [ ,...n ]

[ WITH

{ RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION } ]

[ FOR REPLICATION ]

AS sql_statement [ ...n ]

(1) CREATE PROC [ EDURE ] procedure_name [ ; number ]:建立存储过程可以使用CREATE PROCEDURE或CREATE PROC,后面接着是过程的名称。过程名称后可以再加上number,例如:CREATE PROC MyProc;1 ,CREATE PROC MyProc;2,这样MyProc;1与MyProc;2会被视为同属于MyProc群组的存储过程,可以方便的管理一组存储过程。

(2) @parameter data_type [ V ARYING ] [ = default ] [ OUTPUT ]:此存储过程参数,@parameter为参数名称;data_type是参数的数据类型。每个存储过程最多可以有1024个参数,而TEXT、NTEXT、IMAGE类型数据都可以作为参数。=default 则可以用来指定参数的默认值,例如”@qty int=100”即指定@qty的默认值为100,在执行存储过程时此参数若被省略掉,则以默认值取代。OUTPUT参数选项表示此参数的值是可以返回的,由于存储过程本身只能用RETURN语句返回一个整数值,因此如果还要返回其他的数据,则可以利用参数来返回,并且在执行此存储过程时,也必须以变量作为参数,而且同样要加入OUTPUT选项。

例:

DECLARE @地址 V ARCHAR(100)

EXEC Lookup '杨小雄',@地址 OUTPUT

V ARYING选项是指此返回值是可以改变的,只能用于CURSOR上。当使用CURSOR时,必须同时指定V ARYING 和 CURSOR选项。

(3) WITH { RECOMPILE | ENCRYPTION | RECOMPILE,ENCRYPTION }:

A、RECOMPILE:表示每次执行此存储过程时皆重新编译一次,这样做

的好处是可以用最优化的方法来处理数据。如果没有指定此参数,我们可以在执行存储过程时要求系统重新编译一次。

例:

EXEC MyProc WITH RECOMPILE

B、ENCRYPTION则表示使用加密,使的在syscomments系统表中看不到

存储过程的内容。

(4) FOR REPLICATION:加上此选项表示存储过程仅供复制时使用。

例:

CREATE PROCEDURE MyProc1

AS select * FROM 标标公司 WHERE 价格 > 15

GO

EXEC MyProc1

例:

CREATE PROCEDURE MyProc2

@param1 CHAR(10),@param2 money

WITH ENCRYPTION

AS INSERT 标标公司(产品名称,价格)

V ALUES(@param1,@param2)

GO

EXEC MyProc2 '皮尺',25

SELECT * FROM 标标公司

例:

CREATE PROCEDURE MyProc3

@param1 CHAR(10),@param2 money

@param3 money OUTPUT

AS INSERT 标标公司(产品名称,价格)

V ALUES(@param1,@param2)

SELECT @param3 = SUM(价格)

FROM 标标公司

GO

CREATE PROCEDURE MyProc4

@param1 money

AS PRINT '目前的总价格为:'+CONVERT(V ARCHAR,@param1)

GO

DECLARE @SUM MONEY

EXEC MyProc3 '铅笔',120,@sum OUTPUT

EXEC MyProc4 @sum

一个存储过程即为一个批,在查询分析器中遇到GO时,即表示存储过程的定义已经结束。另外,由于局部变量只在所属的批中有效,因此由存储过程返回的变量也应在同一个批中使用。

例:

CREATE PROCEDURE 取得客户地址

@客户编号 INT,

@地址 V ARCHAR(100) OUTPUT

AS SELECT @地址=地址

FROM 客户

WHERE 客户编号 = @客户编号

IF @@ROWCOUNT > 0

RETURN 0

ELSE

RETURN 1

GO

DECLARE @ret INT,@地址 V ARCHAR(100)

EXEC @ret = 取得客户地址 4,@地址 OUTPUT

IF @ret = 0

PRINT @地址

ELSE

PRINT '找不到!'

例:

CREATE PROCEDURE MyProc5;1

AS SELECT * FROM 旗旗公司

GO

CREATE PROCEDURE MyProc5;2

AS SELECT * FROM 标标公司

GO

MyProc5;1

EXEC MyProc5;2

EXEC MyProc5

12.2.2 在企业管理器中建立存储过程

12.2.3 使用向导建立存储过程

注意text和ntext和image的数据类型除了IS NULL和LIKE之外,不能用其他的运算符做排序。

12.2.4 更改存储过程名称

注意修改存储过程名的两个地方。

12.2.5 修改用户定义存储过程

例:

ALTER PROCEDURE MyProc2

AS SELECT * FROM 标标公司

12.2.6 删除用户自定义存储过程

DROP PROCEDURE procedure_name [,…n]

例:

DROP PRCOEDURE

12.2.7 在查询分析器中管理存储过程

创建、更改、除去、选择等等。

12.3 设计存储过程的技巧

12.3.1 设计存储过程中使用使用语句的限制

(1)在存储过程中,有些建立对象的语句不可以使用,包括:CREATE DEFAULT、CREATE TRIGGER、CREATE PROCEDURE、CREATE VIEW、CREATE RULE。其他建立对象的语句则可以使用,也就是说在编译时,其所参照的对象可以不存在,只要在该语句实际执行时其所参照的对象已存在就可以了。

(2)在同一个数据库中,不同所有者可以建立相同名称的对象。

(3)在存储过程中调用数据表,不管执行者是谁,只要存储过程中未指明对象的所有者,都会先找“存储过程建立者.对象”,找不到的话,再换用“dbo.对象”,若都找不到则产生错误信息。

例:

存储过程建立者数据表所有者

procAll dbo tabAll dbo

procAll abc tabAll abc

procAll ken tabAll ken

procKen ken tabKen Ken

tabAll

John

用户执行procAll 在procAll中

存取tabAll 在procAll中

存取tabKen

执行procKen

dbo dbo.procAll

dbo.tabAll

名称错误名称错误

ken ken.procAll

ken.tabAll

ken.tabKen

ken.procKen abc abc.procAll

abc.tabAll

名称错误名称错误

john dbo.procAll

dbo.tabAll

名称错误名称错误

(4)有些指令在执行时若未指定所有者,会固定以目前用户为对象的所有

者来寻找对象。这些指令包括:ALTER TABLE、DROP TABLE、CREATE INDEX、

DROP INDEX、CREATE TABLE、TRUNCATE TABLE、DBCC、UPDATE STATISTICS 。因此在存储过程中使用这些语句时,最好同时指定所有者,以免

其他用户在执行时,发生预料之外的结果。

例:

CREATE PROCEDURE abc.test

AS

ALTER TABLE book

ADD writer varchar(30)

12.3.2 参数传递的技巧

当执行存储过程时,若没有指明参数名称,则必须依照存储过程所需的参数

依次传递;除非该参数指定有默认值并且是在最后面,否则不可以省略。

例:

CREATE PROCEDURE test

@a INT,

@b INT = NULL,

@c INT = 3

AS

SELECT @a,@b,@c

GO

EXEC test

GO

EXEC test 1

GO

EXEC test 1,DEFAULT

GO

EXEC test 1,DEFAULT,5

GO

EXEC test 1,2,5

GO

在传入的参数中若要使用默认值,可以用DEFAULT关键词代表。另外,也可以使用在存储过程中声明的参数名称,以“@name=value”格式来指明传入参数的对应位置。

例:

EXEC test @c=5,@b=DEFAULT,@a=1

使用“@name=value”方式可以用任意的顺序来传递参数了,而且若位于中间位置的参数有默认值,也可以直接省略而不必使用DEFAULT来传递。

例:

EXEC test 1, @c=2

GO

EXEC test @c=2,1

GO

EXEC test @c=5

在传递参数时,默认是依次传递,但若其中有使用一个“@name=value”来传递,则参数的默认传递顺序即被打乱,因此该参数之后的各参数均须以“@name=value”的方式传递。

12.3.3 存储过程的3种返值过程

(1)在程序中以“RETURN n”返回整数值。

(2)在参数中指定OUTPUT选项参数。

(3)存储过程中执行语句(例如SELECT)所返回的数据集(RecordSet)及通知信息。

例:

CREATE PROCEDURE TestRetVal

@TableName varchar(30) OUTPUT

AS

DECLARE @sqlstr V ARCHAR(100)

SET @sqlstr = 'SELECT * FROM '+@TableName

EXEC(@sqlstr)

IF @@ERROR = 0

BEGIN

SET @TableName = 'Hello'

RETURN 0

END

ELSE

RETURN 1

GO

DECLARE @ret INT,@name V ARCHAR(30)

SET @name = '旗旗公司'

EXEC @ret = TestRetVal @name OUTPUT

print @name+', RETURN = '+ CAST(@ret AS CHAR)

OUTPUT参数及RETURN的返回值可以在批程序中用变量来接收,而SELECT返回值,则是直接返回到执行批的应用程序中,无法在批程序中使用。

在上例中,使用RETURN值来判断存储过程是否正确执行,但也可以用RAISERROR来产生错误信息,然后在执行完程序之后立即检查@ERROR的值,来判断批执行是成功还是失败。

12.3.4 SET NOCOUNT选项

在执行查询或是修改数据的SQL语句时,都会返回语句影响了多少条记录的通知信息,可以设置NOCOUNT选项,设为ON后即不会再显示影响行数的通知信息了,不过实际影响的行数仍然会保存到@@ROWCOUNT系统变量中。

语法格式如下:SET NOCOUNT { ON | OFF }

在程序中用SET所做的设置只在该程序中有效,当程序结束时即会还原为设置前的状态。

12.3.5 临时存储过程

“临时存储过程”(Temporary procedures)的功能和“临时数据表”相同,都是一种因暂时需求而产生的对象,它和一般正常存储过程的不同在于:

(1)临时存储过程放在tempdb数据库中。

(2)当临时存储过程的用户都断开连接后,临时存储过程会自动被删除,临时存储过程分为局部(Local)和(Global)。

例:

CREATE PROCEDURE #tempproc

AS PRINT 'Test'

GO

EXEC #tempproc

12.3.5 嵌套调用

在存储过程中也可以执行另外一个存储过程,此时称为嵌套调用。每调用一次,嵌套的层数即加1,最多可以到32层,一旦操作此数目即会产生错误并中断目前的连接。可以用全局变量@@NESTLEVEL来查看目前程序所在的层数。例:

CREATE PROCEDURE proc3

AS PRINT 'Proc3: at level '+CAST(@@NESTLEVEL AS CHAR)

GO

CREATE PROCEDURE proc2

AS PRINT 'Proc2 start:at level '+CAST(@@NESTLEVEL AS CHAR)

EXEC proc3

PRINT 'Proc2 end:at level '+CAST(@@NESTLEVEL AS CHAR)

GO

CREATE PROCEDURE proc1

AS PRINT 'Proc1 start:at level '+CAST(@@NESTLEVEL AS CHAR)

EXEC Proc2

PRINT 'Proc1 end:at level '+CAST(@@NESTLEVEL AS CHAR)

GO

EXEC proc1

若是在存储过程中执行自己,则称为递归调用(Recursion),但执行效率较低。12.3.6 存储过程的调试

第9章 存储过程与存储函数

第9章存储过程与存储函数 一、选择题 1.MySQL中存储过程的建立以关键字()开始,后面仅跟存储过程的名称和参数。A.CREATE FUNCTION B.CREATE TRIGGER C.CREATE PROCEDURE D.CREATE VIEW 2.下列关于存储过程名描述错误的是()。 A.MySQL的存储过程名称不区分大小写。 B.MySQL的存储过程名称区分大小写。 C.存储过程名不能与MySQL数据库中的内置函数重名。 D.存储过程的参数名不要跟字段名一样。 3.下面声明变量正确的是()。 A.DECLARE x char(10) DEFAULT 'outer ' B.DECLARE x char DEFAULT 'outer ' C.DECLARE x char(10) DEFAULT outer D.DECLARE x DEFAULT 'outer ' 4.从tb_sutdent表中将名称为mrsoft的用户赋值给host,以下SQL语句正确的是()。A.SELECT host INTO name FROM tb_sutdent WHERE name ='mrsoft'; B.SELECT name INTO host FROM tb_sutdent WHERE name= 'LeonSK '; C.SELECT name INTO host FROM tb_sutdent WHERE name='mrsoft'; D.SELECT name INTO host FROM tb_sutdent WHERE name=‘mrsoft’; 5.光标的一般使用步骤,以下正确的是()。 A.声明光标使用光标打开光标关闭光标 B.打开光标声明光标使用光标关闭光标 C.声明光标打开光标选择光标关闭光标 D.声明光标打开光标使用光标关闭光标 6.下列控制流程语句中,MySQL存储过程不支持()。 A.WHILE B.FOR C.LOOP D.REPEAT 25

第12章 存储过程

第12章存储过程 12.1 存储过程概述 存储过程是一种命名PL/SQL程序块,它将一些相关的SQL语句,流程控制语句组合在一起,用于执行某些特定的操作或者任务。将经常需要执行的特定的操作写成过程,通过过程名,就可以多次调用过程,从而实现程序的模块化设计,这种方式提高了程序的效率,节省了用户的时间。 存储过程具有以下特点: ●存储过程在服务器端运行,执行速度快。 ●存储过程增强了数据库的安全性。 ●存储过程允许模块化程序设计。 ●存储过程可以提高系统性能。 12.2 存储过程的创建和调用 12.2.1 创建存储过程 1. 通过PL/SQL 语句创建存储过程 PL/SQL创建存储过程使用的语句是CREATE PROCEDURE。 语法格式: CREATE [OR REPLACE] PROCEDURE <过程名> /*定义过程名*/ [ (<参数名> <参数类型> <数据类型> [ DEFAULT <默认值>] [, …n])] /*定义参数类型及属性*/ { IS | AS } [<变量声明>] /*变量声明部分*/ BEGIN <过程体> /*PL/SQL过程体*/ END [<过程名>][;] 说明: (1)OR REPLACE:如果指定的过程已存在,则覆盖同名的存储过程。 (2)过程名:定义的存储过程的名称。 (3)参数名:存储过程的参数名必须符合有关标识符的规则,存储过程中的参数称为形式参数(简称形参),可以声明一个或多个形参,调用带参数的存储过程则应提供相应的实际参数(简称实参)。 (4)参数类型:存储过程的参数类型有IN、OUT和IN OUT 三种模式,默认的模式是IN模式。 ●IN:向存储过程传递参数,只能将实参的值传递给形参,在存储过程内部只能读不能写,对应IN模式的实参可以是常量或变量。 ●OUT:从存储过程输出参数,存储过程结束时形参的值会赋给实参,在存储过程内部可以读或写,对应OUT模式的实参必须是变量。 ●IN OUT:具有前面两种模式的特性,调用时,实参的值传递给形参,结束时,形参的值传递给实参,对应IN OUT模式的实参必须是变量。 (5)DEFAULT:指定IN参数的默认值,默认值必须是常量。 (6)过程体:包含在过程中的PL/SQL 语句。 存储过程可以带参数,也可以不带参数。 【例12.1】创建一个不带参数的存储过程spTest,输出Hello Oracle。 CREATE OR REPLACE PROCEDURE spTest /*创建不带参数的存储过程*/

数据库第8-11章习题

第8章数据库编程 一、选择题 1、修改存储过程使用的语句是()。 A. ALTER PROCEDURE B. DROP PROCEDURE C. INSERT PROCEDUE D. DELETE PROCEDUE 2、创建存储过程的语句是()。 A. ALTER PROCEDURE B. DROP PROCEDURE C. CREATE PROCEDUE D. INSERT PROCEDUE 3、下面()组命令,将变量count值赋值为1。 A.DECLARE @count SELECT @count=1 B.DIM count=1 C.DECLARE count SELECT count=1 D.DIM @count SELECT @count=1 4、在SQL Server 中删除存储过程用()。 A.ROLLBACK B. DROP PROC C.DELALLOCATE D. DELETE PROC 10.在SQL Server 编程中,可使用()将多个语句捆绑。 A.{} B. BEGIN-END C.( ) D. [ ] 二、填空题 1、在T-SQL编程语句中,WHILE结构可以根据条件多次重复执行一条语句或一个语句块,还可以使用()和CONTINUE 关键字在循环内部控制 WHILE 循环中语句的执行。 2、存储过程是存放在()上的预先定义并编译好的T-SQL语句。 3、游标是系统为用户开设的一个(),存放SQL语句的执行结果 第9章关系查询处理和查询优化 课后作业:P275,2题答案:

1 2、事务的原子性是指。 A.事务中包括的所有操作要么都做,要么都不做 B.事务一旦提交,对数据库的改变是永久的 C.一个事务内部的操作及使用的数据对并发的其他事务是隔离的 D.事务必须是使数据库从一个一致性状态变到另一个一致性状态 3、事务的一致性是指。 A.事务中包括的所有操作要么都做,要么都不做 B.事务一旦提交,对数据为的改变是永久的 C.一个事务内部的操作及使用的数据对并发的其他事务是隔离的 D.事务必须是使数据库从一个一致性状态变到另一个一致性状态 4、事务的隔离性是指。 A.事务中包括的所有操作要么都做,要么都不做 B.事务一旦提交,对数据库的改变是永久的 C.一个事务内部的操作及使用的数据对并发的其他事务是隔离的 D.事务必须是使数据库从一个一致性状态变到另一个一致性状态 5、事务的持续性是指。 A.事务中包括的所有操作要么都做,要么都不做

第10章 存储过程、函数和包

第10章存储过程、函数和包 存储过程(PROCEDURE)、函数(FUNCTION)和包(PAKAGE)是以编译的形式存储在数据库中的数据库的对象,并成为数据库的一部分,可作为数据库的对象通过名字被调用和访问。 存储过程通常是实现一定功能的模块;函数通常用于计算,并返回计算结果;包分为包头和包体;用于捆绑存放相关的存储过程和函数,起到对模块归类打包的作用。 存储过程、函数和包是数据库应用程序开发的重要方法,三者既有区别,也有联系。 ?存储过程和存储函数。 ?过程的参数和调用。 ?包和包的应用。 10.1 存储过程和函数 存储过程和函数也是一种PL/SQL块,是存入数据库的PL/SQL块。但存储过程和函数不同于已经介绍过的PL/SQL程序,我们通常把PL/SQL程序称为无名块,而存储过程和函数是以命名的方式存储于数据库中的。 10.1.1 认识存储过程和函数 和PL/SQL程序相比,存储过程有很多优点,具体归纳如下: ·存储过程和函数以命名的数据库对象形式存储于数据库当中。存储在数据库中的优点是很明显的,因为代码不保存在本地,用户可以在任何客户机上登录到数据库,并调用或修改代码。 ·存储过程和函数可由数据库提供安全保证,要想使用存储过程和函数,需要有存储过程和函数的所有者的授权,只有被授权的用户或创建者本身才能执行存储过程或调用函数。 ·存储过程和函数的信息是写入数据字典的,所以存储过程可以看作是一个公用模块,用户编写的PL/SQL程序或其他存储过程都可以调用它(但存储过程和函数不能调用PL/SQL 程序)。一个重复使用的功能,可以设计成为存储过程,比如:显示一张工资统计表,可以设计成为存储过程;一个经常调用的计算,可以设计成为存储函数;根据雇员编号返回雇员的姓名,可以设计成存储函数。 ·像其他高级语言的过程和函数一样,可以传递参数给存储过程或函数,参数的传递也有多种方式。存储过程可以有返回值,也可以没有返回值,存储过程的返回值必须通过参数带回;函数有一定的数据类型,像其他的标准函数一样,我们可以通过对函数名的调用返回函数值。 存储过程和函数需要进行编译,以排除语法错误,只有编译通过才能调用。

第11章 数据库备份

第十一章数据库的备份 11.1 概述 数据库的备份和恢复是数据库管理员的重要职责之一。 不管数据库系统如何精心设计、配置和优化,它们都难免出现系统或硬件故障,从而引起数据库中的数据遭到破坏,当数据库中的数据遭到破坏时,数据库管理员必须尽快从数据备份中恢复数据,从而将损失减少到最小,保证用户的正常使用。数据库的备份对成功恢复数据是非常关键的,数据库管理员必须根据企业的需要,制定出良好的备份和恢复策略,并认真实施它。 11.1.1 Oracle备份的概念 数据库的备份是数据库的拷贝。当原来的数据丢失时,可以使用备份重建丢失的信息(组成Oracle数据库的物理文件)。该拷贝包括数据库的重要部分,如控制文件、存档日志和数据文件等。 备份包括物理备份和逻辑备份,物理备份是所采用的最主要的备份方式,是物理数据库文件的拷贝。如果发生物理数据库丢失或崩溃,物理备份用于保证数据库在最小的数据丢失或没有数据丢失的情况下得到恢复。它实际上进行上的是物理文件的拷贝,包含拷贝构成数据库的文件而不管其逻辑内容,进行物理备份可以采用两种方法: ?使用恢复管理器(Recovery Manager,简称RMAN)程序; ?操作系统文件备份命令,也叫做文件系统备份。Oracle 支持两种不同类型的物理文件备份:脱机备份(offline backup)和联机备份(online backup)。 相应的逻辑备份用于实现数据库对象(比如数据库表或存储过程)的恢复并且它是一个全面备份策略的必要的组成部分,它通常采用Oracle的Export程序将逻辑数据导出并以二进制的方式存储。一般来说我们使用逻辑备份作为物理备份的必要补充。 11.1.2 Oracle数据库系统故障类型 不管数据库系统如何精心设计、配置和优化,它们都难免出现系统或硬件故障,语句和进程故障。这些故障大致可以分为以下几大类: 1. 介质故障 在读或写要求操作数据库的文件时可能会出现错误,这种故障就叫做介质故障,因为在读或写存储介质上的文件时会出现物理问题。一个常见的介质故障的例子是磁头的碰撞会引起磁盘驱动器上所有文件的丢失。介质故障是数据库数据的最大威胁。介质问题主要有:?磁盘磁头故障使磁盘驱动器上所有文件丢失。 ?数据文件、控制文件、联机或归档重做日志文件被意外删除、覆盖或损坏。 从介质故障中恢复的合适策略取决于受到影响的文件。介质故障是备份与恢复策略所需

第10章 存储过程

第10章存储过程 存储过程是SQL语句和可选控制流语句的预编译集合,它以一个名称存储并作为一个单元处理。本章介绍存储过程的创建、执行、修改和删除等。 10.1 概述 存储过程存储在数据库内,可由应用程序通过一个调用执行,而且允许用户声明变量、有条件执行以及其他强大的编程功能。存储过程可以使对数据库的管理,以及显示关于数据库及其用户信息的工作容易得多。 存储过程可包含程序流、逻辑以及对数据库的查询。它们可以接受参数、输出参数、返回单个或多个结果集以及返回值。 可以出于任何使用SQL语句的目的来使用存储过程,它具有以下优点: 可以在单个存储过程中执行一系列SQL语句。 可以从自己的存储过程内引用其他存储过程,这可以简化一 系列复杂语句。 存储过程在创建时即在服务器上进行编译,所以执行起来比 单个SQL语句快,且能减少网络通信的负担。 10.2创建存储过程 要使用存储过程,首先要创建一个存储过程。可以使用Transact-SQL 语言的CREATE PROCEDURE语句,也可以使用企业管理器或者存储过程创建向导来完成。 1.使用CREATE PROCEDURE语句创建存储过程 CREATE PROCEDURE语句的语法格式为: CREATE PROC[EDURE ] procedure_name [; number] [ {@parameter data_type} [VARYING ][ = default][OUTPUT] ][,…n] [WITH

{RECOMPILE | ENCRYPTION | RECOMPILE,ENCRYPTION}] [FOR REPLICATION] AS sql_statement […n ] 其中各参数含义如下: procedure_name新存储过程的名称。 number 是可选的整数,用来对同名的过程分组,以便用一条 DROP PROCEDURE语句即可将同组的过程一起除去。例 如,名为orders的应用程序使用的过程可以命名为 orderproc;1、orderproc;2等。DROP PROCEDURE orderproc语 句将除去整个组。如果名称中包含定界标识符,则数字不应 包含在标识符中,只应在“procedure_name”前后使用适当的定 界符。 @parameter 过程中的参数。在CREATE PROCEDURE语句中 可以声明一个或多个参数。用户必须在执行过程时提供每个 所声明参数的值(除非定义了该参数的默认值)。存储过程最 多可以有2100个参数。 data_type 参数的数据类型。所有数据类型(包括text、ntext和 image)均可以用作存储过程的参数。不过,cursor数据类型只 能用于OUTPUT参数。如果指定的数据类型为cursor,也必须 同时指定VARYING和OUTPUT关键字。 VARYING 指定作为输出参数支持的结果集(由存储过程动态 构造,内容可以变化)。仅适用于游标参数。 default 参数的默认值。如果定义了默认值,不必指定该参数 的值即可执行过程。默认值必须是常量或NULL。 OUTPUT 表明参数是返回参数。该选项的值可以返回给 EXE[UTE]。使用OUTPUT参数可将信息返回给调用过程。 {RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION} RECOMPILE表明SQL Server不会缓存该过 程的计划,该过程将在运行时重新编译。ENCRYPTION表示 SQL Server加密syscomments表中包含CREATE PROCEDURE 语句文本的条目。 FOR REPLICATION 指定不能在订阅服务器上执行为复制创 建的存储过程。 sql_statement 过程中要包含的任意数目和类型的Transact- SQL语句。但有一些限制。 【例10.1】下面创建一个简单的存储过程stud_degree ,用于检索所有学生的成绩记录: USE school --判断stud_degree存储过程是否存在,若存在,则删除 IF EXISTS (SELECT name FROM sysobjects WHERE name = 'stud_degree' AND type ='P')

第十一章 活动目录的维护

第十一章活动目录的维护 内容摘要 本章重点介绍Windows2000活动目录数据的存储过程和维护方法。重点包括: ? 活动目录数据的备份和恢复 ? 活动目录数据的优化 ? 活动目录的维护程序 考点提示 ? 活动目录的授权恢复和非授权恢复 ? 管理活动目录对象移动的程序:Movetree ? Ntdsutil.exe的应用 11.1 活动目录维护简介 造成Windows2000活动目录故障的原因很多,后果也不完全相同,如系统不能启动,不能登录,网络访问和网络验证出现故障等。当活动目录出现故障时,首先应查找可能引起故障的原因,然后根据掌握的资源情况,制定修复策略,对活动目录进行修复。 11.2 活动目录数据的维护 Windows2000活动目录将数据存储在一个事物数据库和日志文件中,对活动目录数据进行维护可以在系统出现故障时,如硬盘损坏或者软件系统崩溃而导致数据丢失时,对数据进行有效的恢复。活动目录数据维护的关键在于对活动目录数据库和日志文件进行有效的维护。 Windows2000服务器对活动目录数据提供如下的维护方法: ? 备份和恢复。使用Windows2000自带的备份工具可以对活动目录数据库进行备份和恢复。活动目录数据库在Windows2000中是整个系统数据的一部分。 ? 移动。Windows2000服务器支持将活动目录数据库从一个地方移动到另一个地方,注意移动一个活动目录数据库文件后,原文件并不会自动删除,而是继续存在,这儿的移动和复制有一些相似。 ? 碎片整理。频繁的数据库访问会造成磁盘空间利用率下降。碎片整理可以重新排列数据库中的数据,回收可以利用的磁盘空间。 11.2.1 活动目录数据的存储过程 Windows2000活动目录使用可扩展的存储引擎(ESE)对数据进行存储。ESE应用事务和日志的概念将数据存储在数据库和事务日志文件中。所谓事务(Transaction),是指系统作为一个不可分割的整体进行处理的更改、添加、删除等操作的集合。 活动目录数据存储的基本过程如下: 1、为数据库更改创建一个事务 2、向日志文件中写入事务 3、将事务写入内存缓冲区 4、将更改在系统空闲的时候写入数据库 5、更改指向日志中未写入数据库的数据项的指针。

第11章 项目采购管理

第十一章项目采购管理 1.下列哪项是用于征求潜在卖方的建议书? A.采购文件 B.卖方建议书 C.需求文件 D.合作协议 2.合同比其他项目文件需要经过更多审批的原因在于: A.合同更重要 B.合同涉及双方的利益 C.合同更复杂 D.合同具有法律约束力 3.审批过程的主要目标是_____。 A.降低风险 B.将风险转移给其他人 C.确保以清晰的合同语言来描述产品、服务或成果,以便满足既定的项目需要 D.确保项目成员都能了解合同 4.在合同收尾前,经双方共同协商,我们可以根据下列哪项对合同进行修改? A.合同的变更控制条款 B.合同终止条款 C.替代争议解决 D.采购管理计划 5.作为制定进度计划的输出,项目进度计划也是下述哪项的输入? A.规划采购 B.实施采购 C.管理采购 D.结束采购 6.采购审计发生在下列哪个过程中? A.规划采购 B.实施采购 C.管理采购 D.结束采购 7.一个项目经理第一次编制采购文件,他向你请教有关采购文件的相关知识。你可以提供给他下列建议, 除了____。 A.买方拟订的采购文件应便于潜在卖方做出准确、完整的应答 B.采购文件的复杂和详细程度应与采购的价值和风险水平相适应 C.采购文件必须严格,不允许卖方提建议 D.买方拟订的采购文件要便于对卖方应答进行评价 8.供方选择标准在下列哪个过程中产生? A.规划采购 B.实施采购 C.管理采购 D.结束采购 9.有争议的变更也可被称为下列各项,除了___。 A.索赔 B.争议 C.诉求 D.问题 10.下列哪项内容描述了如何管理从制定采购文件直到合同收尾的各个采购过程? A.成本绩效基准 B.采购管理计划 C.自制或外购决策 D.采购文件

公共关系管理第12章

第十二章公共事业分类管理概述(下) 复习思考题 1、卫生事业产品的分类和特点是什么? 从卫生事业活动的表现形式和结果——产品的角度看,卫生事业产品最突出的特点就是准公共性。卫生事业产品的准公共性,主要表现在以下方面: (1)、卫生事业产品具有较强的外部收益 卫生事业产品既有内部性,但外部性则更为突出。所谓内部性,是指医疗卫生机构的服务,解除了病人的身体疾患、延长了生命,提高了个人生活质量,同时,也收取了与其成本相适应的费用。所谓外部性,是指医疗卫生机构通过对病人的诊治、对疾病的预防、对卫生环境条件的改善等,通过使病人个体免除和避免了病痛、挽救了其生命,使生活环境卫生安全,提高了人们健康知识,从而提高了劳动力素质,有益于社会生产的发展和社会的安定和进步。这是一个社会存在和发展的基本的也是共同的需要,也是维护公共利益的必需。尤其要注意到的是,卫生防疫机构进行的对诸多恶性流行性疾病的大面积的防治,如对小儿麻痹、白喉、肺结核、天花等的防治,虽然花费的成本很小,却可以大大减少人口的死亡率和社会的治疗费用,而且,一些疾病具有传染性,如不及时治疗,不仅会危及人被感染者的生命,即负的内部效应,而且还会传染他人并进而形成该病的曼延,产生可怕的负外部效应。因此,卫生事业产品具有突出的外部收益。 (2)、卫生事业产品具有一定的非排他性或一定的消费竞争性 就上述的现代卫生事业的基本构成来看,不同行业的卫生事业产品之间在排他性和竞争性上的表现差异是比较大的。一般来说,突发事故救护基本上是纯公共产品,具有非排他性和非竞争性,卫生防疫和医学研究中的基础医学研究如病理研究等,也基本上是具有非排他性和非竞争性,属于接近纯公共产品的准公共产品。但是,在现代社会中,随着公众卫生消费需求的提高和个性化、层次性的出现,因而在卫生防疫中某些超过社会一般需求的项目是首先满足个人及家庭需要的,因而存在消费竞争性。医学研究中的临床医疗技术研究,一方面是一种应用性研究,另方面又涉及到社会的共同需求,因而具有一定的非排他性但也有一定的消费竞争性。 医疗产品总体上具有一定的非排他性和一定的消费竞争性。因为,在现代社会中,从社会共同需求出发,公民享有基本的医疗服务,体现为一定的医疗保障制度,因而具有一定的非排他性。但是,由于一定社会中的医疗能力是有限的尤其是高水平的医疗机构是有限的,且公众个人的医疗消费需求是多样的和有层次性的,因而医疗产品存在着消费竞争。总体上,医疗事业产品是接近于私人产品的准公共产品。 2、为什么政府必须介入卫生事业产品市场? 医疗卫生产品市场是指由供给方(医疗卫生的提供者)与需求方(医疗卫生的消费者)购成的价格与市场的关系。虽然自现代卫生事业产生后,一些国家如中国及西方的某些高福利国家,曾出现过将整个卫生事业作为公益事业和福利事业,不承认医疗卫生产品市场的存在或客观上没有医疗卫生产品市场,但如上所述,在现代社会中医疗行业等的商品性是比较明显的。实际上,当代世界范围内,医疗卫生服务市场化是一个普遍的趋势,医疗卫生产品市场是客观的需求,也是客观的存在。 但医疗卫生产市场又是一个较一般商品市场特殊的市场,政府必须介入,其主要原因在于: (1)、卫生事业产品的外部性决定了政府必须介入 现代卫生事业中有些产品的性质已经接近于纯公共产品,有的则是准公共产品,而不论哪一类卫生事业产品都具有突出的外部收益。具有外部收益的产品如果完全按照市场规则来配置资源,必然会出现市场失灵。具有纯公共性的卫生产品不宜采用市场提供方式,而卫生产品的外部收益又决定不能完全依赖市场机制,因而,政府必须对卫生事业产品市场进行必要的干预。 (2)、卫生产品信息的不对称性决定了政府必须介入 这里所说的卫生产品信息不对称,主要表现在医疗行业中,具体是医生提供医疗服务时,与病人之间的信息不对称。这一不对称是:正常情况下,医生在医疗专业知识方面比病人多得多,而且,医生既掌握着病人的病情信息,又负责病人的治疗方案,病人在治

第10章存储过程概论

第10章存储过程 关键词: 存储过程创建存储过程执行存储过程存储过程的参数查看存储过程修改存储过程删除存储过程 学习要求: 本章主要阐述了存储过程的创建和使用方法。并且全面地、系统地介绍了存储过程的概念、存储过程的优点;系统存储过程的特点及用途;创建存储过程的方法;查看、修改和删除存储过程的方法。重点分析了存储过程的创建和使用方法。学习和掌握本章,是对SQL Server 2000数据库的灵活运用。 10.1 概述 1、存储过程——是为实现某个特定任务而编写的一段代码。 2、存储过程的特点: ● 可以包含一条或多条Transact-SQL语句。 ● 可以接受输入参数并可以返回输出值。 ● 一个存储过程可以调用另一个存储过程。 ● 会返回执行情况的状态代码给调用它的程序。 3、存储过程的优点: ● 实现模块化编程。一个存储过程可以被多个用户共享和重用。 ● 加快程序的运行速度。第一次执行后的存储过程会在缓冲区中创建查询树,使得第二次执行时不用进行预编译。 ● 可以减少网络流量。存储过程存储在服务器上,只有触发执行存储过程的命令和返回结果才在网络上传输。 ● 可以提高数据库安全性。可以只授予用户访问存储过程的权限,而不授予其直接修改数据表的权限。 3、存储过程的分类: ● 系统存储过程。由系统自动创建,主要存储在master数据库中,一般以sp_为前缀。系统存储过程完成的功能主要是从系统表中获取信息。 ● 用户自定义存储过程。由用户创建并能完成某一特定功能的存储过程。 10.2 创建存储过程 1、使用CREATE PROCEDURE语句创建存储过程 格式:CREATE PROC[EDURE ] procedure_name [; number] [ {@parameter data_type}

崔运武《公共事业管理概论》笔记和课后习题详解【圣才出品】(第十二章 公共事业分类管理概述(下))【圣

第十二章公共事业分类管理概述(下) 12.1 复习笔记 一、卫生事业管理 1.现代卫生事业活动的基本内容及类别划分 (1)现代卫生事业的基本活动内容 ①医疗。指医院等单位以治病为主要业务的活动。 ②卫生。指防疫站等机构以防治疫病,包括防治流行病的发生为主要业务的活动。 ③医学研究。指专门从事医学研究的机构或个人所进行的疾病的病理研究和临床治疗技术研究。 ④突发事故救护。指专门的突发事故救护机构如急救中心,以及承担突发事故救护任务的医疗机构等所进行的紧急救护。 (2)现代卫生事业的类别划分 按照卫生事业活动的直接目的进行分类,卫生事业活动可以分为以下两个类别: ①以满足社会共同需要为出发点的卫生活动 卫生活动、医学研究和突发事故救护的直接目标是保证社会公众的基本健康水平和提高生活环境的卫生状况。只要是该社会中的公民,每一个人都可以而且应该享受这类卫生服务。 ②以满足个人及家庭需要为出发点的卫生活动

医疗机构是这一类卫生活动的主要承担者,即卫生事业中的医疗行业主要是以满足个人及家庭需要为直接目标的。 2.卫生事业产品的准公共性 (1)卫生事业产品具有较强的外部收益 外部性,是指医疗卫生机构通过对病人的诊治、对疾病的预防、对卫生环境条件的改善等,通过使病人个体免除和避免了病痛,挽救了其生命,使生活环境卫生安全,提高了人们健康知识,从而提高了劳动力素质,有益于社会生产的发展以及社会的安定和进步。 (2)卫生事业产品具有一定的非排他性或一定的消费竞争性 ①在现代社会中,随着公众卫生消费需求的提高和个性化、层次性的出现,在卫生防疫中某些超过社会一般需求的项目是首先满足个人及家庭需要的,因而存在消费竞争性。医学研究中的临床医疗技术研究,一方面是一种应用性研究,另一方面又涉及社会的共同需求,因而具有一定的非排他性,但也有一定的消费竞争性。 ②卫生事业产品的外部性排列如图l2-1所示。 图12-1 卫生事业产品的外部性 3.政府介入卫生产品市场的必要性

第10章 存储过程

存 储 过 程 练习题10及参考答案 1.什么是存储过程存储过程分为哪几类使用存储过程有什么好处 答:存储过程是一系列预先编辑好的、能实现特定数据操作功能的SQL 代码集,它与特定的数据库相关联,存储在SQL Server 服务器上。用户可以像使用函数一样重复调用这些存储过程,实现它所定义的操作。 存储过程分为3类:系统提供的存储过程、用户定义的存储过程和扩展存储过程。使用存储过程有如下好处如下: (1)存储过程提供了处理复杂任务的能力:存储过程提供了许多标准SQL 语言所没有的高级特性,通过传递参数和执行逻辑表达式,能够处理复杂任务。 (2)增强代码的重用性和共享性:每一个存储过程可以在系统中重复地调用,可以被多个有访问权限的用户访问。存储过程可以增强代码的重用性和共享性,加快应用系统的开发速度,提高开发的质量和效率。 (3)减少网络数据流量:存储过程是存放在服务器中并在服务器上运行的,应用系统调用存储过程时只有触发执行存储过程的命令和执行结束返回的结果在网络中传输。所以,使用存储过程可以减少网络中的数据流量。 (4)加快系统运行速度:第一次执行后的存储过程会驻留在内存中,以后可以直接运行,从而加快应用系统的处理速度。 (5)加强系统安全性:SQL Server 可以不授予用户某些表、视图的访问权限,但授第 章 10

予用户执行存储过程的权限,通过存储过程来对这些表或视图进行访问操作。从而保证表中数据的安全性。 2.修改存储过程有哪几种方法假设有一个存储过程需要修改但又不希望影响现有的权限,应使用哪个语句来进行修改 答:修改存储过程有两种方法:一种方法是把旧的存储过程删除,然后再重新建立该存储过程。另一种方法是用单个的步骤更改该存储过程。使用前一种方法修改存储过程,所有与该存储过程相关联的权限都将丢失。而使用后一种方法可以更改过程或参数定义,但为该存储过程定义的权限将保留。所以要修改一个存储过程但又不希望影响现有的权限可使用后一种方法。使用的语句为ALTER PROCEDURE。 上机实验题9及操作过程 在上机实验题8的factory数据库上,使用T-SQL语句完成如下各题: (1)创建一个为worker表添加职工记录的存储过程Addworker。 (2)创建一个存储过程Delworker删除worker表中指定职工号的记录。 (3)显示存储过程Delworker。 (4)删除存储过程Addworker和Delworker。 操作过程 (1)建立存储过程的程序如下: USE factory GO CREATE PROCEDURE Addworker @no int=NULL, @name char(10)=NULL, @sex char(2)=NULL, @birthday datetime=NULL,

第09章_存储过程的创建和使用——例题解答

存储过程的创建和使用 例9-2-1:创建一个名称为“StuInfo”的存储过程,要求完成以下功能:在T_STUDENT 表中查询05541班学生的学号、姓名、性别、出生日期和政治面貌五个字段的内容。 在创建存储过程的窗口中,单击“查询”菜单,选择“指定模板参数的值”,会弹出“指定模板参数的值”对话框。 在“指定模板参数的值”对话框中将“Procedure_Name”参数对应的名称修改为“StuInfo”,单击“确定”按钮,关闭此对话框。在创建存储过程的窗口中将对应的SELECT语句修改为以下程序代码: Select S_NUMBER AS 学号, S_NAME AS 姓名, SEX AS 性别, BIRTHDAY AS 出生日期, POLITY AS 政治面貌 FROM T_STUDENT WHERE LEFT(S_NUMBER,5)='05541' 输入完毕后,单击窗口工具栏上的“执行”按钮执行以上程序段,就会创建一个新的存储过程“StuInfo”。 例9-2-2:创建一个存储过程StuScoreInfo,完成的功能是在表T_STUDENT、表T_COURSE和表t_SCORE中查询以下字段:班级、学号、姓名、性别、课程名称、考试分

SQL Server 2005实用教程 数。 程序清单如下: --打开STUDENT数据库 USE STUDENT --查询是否已存在此存储过程,如果存在,就删除它 IF EXISTS (SELECT name FROM sysobjects WHERE name = 'StuScoreInfo' AND type = 'P') DROP PROCEDURE StuScoreInfo GO --创建存储过程 CREATE PROCEDURE StuScoreInfo AS Select 班级=SUBSTRING(T_STUDENT.S_NUMBER,1, LEN(T_STUDENT.S_NUMBER)-2), 学号=SUBSTRING(T_STUDENT.S_NUMBER, LEN(T_STUDENT.S_NUMBER)-1,2), S_NAME AS 姓名, SEX AS 性别, T_COURSE.C_NAME AS 课程名称, t_SCORE.SCORE AS 考试分数 FROM T_STUDENT,T_COURSE,t_SCORE WHERE T_STUDENT.S_NUMBER=t_SCORE.S_NUMBER AND T_COURSE.C_NUMBER=t_SCORE.C_NUMBER GO

护理管理学-试题与答案-第十二章-护理管理与医疗卫生法律法规教程文件

一、单选题 1.下列哪项属于执业安全问题( ) A.侵权行为B.失职行为C.错记血压D.遭受人身伤害 2.护士查对不严格给患者发错药属于( ) A.侵权行为B.失职行为C.犯罪D.渎职 3.护士在工作时对患者恶性相加,侵犯了患者的什么权利( ) A.隐私权B.自由权 C.人身财产权D.生命健康权 二、填空题 1.侵权行为主要涉及、和。 2.常见的执业安全问题主要有、和职业保险不健全。 三、是非题 ( )1.护士执业时,使用恶性语言和不良行为,侵犯了公民的生命健康权。( )2.护士有承担预防保健工作、宣传防病治病知识、进行康复指导、开展健康教育、提供卫生咨询的义务。 ( )3.由于查对不严格以致打错针属于失职行为。 ( )4.未认真消毒导致病人发生交互感染犯了渎职罪。 ( )5.护理文书书写不实事求是属于失职行为。 ( )6.护士利用职务之便窃取病房的杜冷丁给朋友,结果朋友转手卖出,护士的行为属于失职行为。 ( )7.遇紧急情况应及时通知医生并配合抢救,医生不在场时,护士应当采取力所能及的急救措施。 ( )8.护士有义务对病人进行科学护理。

( )9.护士执业时,使用恶性语言,损害病人利益,属于侵权行为。 ( )10.非法阻挠护士依法执业或殴打护士的,可由护士所在单位提请公安机关予以治安行政处罚。 四、名词解释 1.卫生法 2.医政法 3.护理法 4.医疗事故 5.医疗废物 6.侵权行为 五、简答题 1.简述医政法的特点。 2.侵权行为主要涉及侵犯哪些权利? 六、论述题 1.试举例说明在护理管理中面临的执业安全问题主要有哪些? 2.职业保险的好处有哪些? 3.护士要做到依法执业应注意哪些问题? 【参考答案】 一、单选题 1.D 2.B 3.D

第11章 触发器

触 发 器 11.1 练习题11及参考答案 1.什么是触发器?其主要功能是什么? 答:触发器是一种实施复杂数据完整性的特殊存储过程,在对表或视图执行UPDATE 、INSERT 或DELETE 语句时自动触发执行,以防止对数据进行不正确、未授权或不一致的修改。 触发器主要用于保持数据完整性、检查数据有效性、实现数据库管理任务和一些附加的功能。 2.触发器分为哪几种? 答:触发器分为DML 和DDL 触发器: ? DML 触发器:是在执行数据操作语言事件时被调用的触发器,其中数据操作语言 事件包括:INSERT 、UPDATE 和DELETE 语句。触发器中可以包含复杂的T-SQL 语句,触发器整体被看作一个事务,可以进行回滚。 ? DDL 触发器:它也是一种特殊的存储过程,由相应的事件触发后执行。与DML 不同的是,它相应的触发事件是由数据定义语言引起的事件,包括CREATE 、ALTER 和DROP 语句。DDL 触发器用于执行数据库管理任务,如调节和审计数据库运转。DDL 触发器只能在触发事件发生后才会调用执行,即它只能是AFTER 类型的。 3. INSERT 触发器、UPDA TE 触发器和DELETE 触发器有什么不同? 答:它们的主要区别是触发的事件不同,INSERT 触发器由INSERT 操作所触发执行;UPDA TE 触发器由UPDA TE 操作所触发执行;DELETE 触发器由DELETE 操作所触发执行。 4. AFTER 触发器和INSTEAD OF 触发器有什么不同? 答:两者的区别如下: ? AFTER 触发器:在执行了INSERT 、UPDATE 或DELETE 语句操作之后执行 第 章 11

第11章MySQL存储过程与函数

数据库系统原理及MySQL应用教程(第2版) 课后习题参考答案 第11章MySQL存储过程与函数 1、存储过程和存储函数是在数据库中定义一些被用户定义的SQL语句集合。 二者存在以下几个区别: 1)存储过程实现的功能要复杂一点,而函数实现的功能针对性比较强。 2)存储过程可以返回参数,而函数只能返回值或者表对象。 3)存储过程可以使用非确定函数,不允许在用户定义函数主体中内置非确定函数。 4)存储过程一般是作为一个独立的部分来执行,而函数可以作为查询语句的一个部分来调用。 2、创建一个存储过程,根据学生的学号查询学生的姓名 create PROCEDURE getnamebysno(in xh char(10),out name char(20)) BEGIN select sname into name from student where sno=xh; 调用该存储过程:call getnamebysno(‘1101’); 创建一个名为numstu的存储函数,查询学生的人数 Create function numstu() Returns integer Begin Return(select count(*) from student); 调用:select numstu() 3、存储过程的优点: ◆存储过程增强了SQL语言的功能和灵活性 ◆存储过程能实现较快的执行速度。 ◆存储过程允许标准组件是编程。

◆存储过程能过减少网络流量。 ◆存储过程可被作为一种安全机制来充分利用。 4、查看存储函数状态方法: ●通过show status语句 ●如果要查看存储过程或函数的详细信息,要使用show create语句 5、游标是一个被SELECT语句检索出来的结果集。在存储了游标后,应用程序或用户就可以根据需要滚动或浏览其中的数据。 6、游标(cursor)具有以下特性: ●只读的,不能更新的 ●不滚动的 ●不敏感的,不敏感意为服务器可以活不可以复制它的结果表 (1)游标的声明:语法格式:declare cursorname cursor for select _ statement (2)打开游标:Open cursor_ name (3)读取游标:fetch cursor_name into var_ name [,var_name] …(4) 关闭游标:close cursorname 7、CREATE PROCEDURE sp_update email(IN USer_name VARCHAR(50),IN e_mail VARCHAR(50)) UPDATE content SET email=e_mail WHERE username=user_name; 8、A 9 D 10 D 11 B 12 (1) create proceduce p1() select dno,count(*) from emp group by dno; (2) create proceduce p2(in gy char(10)) select * from emp where dno=gy; (3) create proceduce p3() select count(*) as 人数from emp where sex=’女’; (4) create proceduce p4(in gy char(10)) select avg(empage) from emp where dno=gy; call p4(‘11’);

第10章 存储过程

存 储 过 程 10.1 练习题10及参考答案 1.什么是存储过程?存储过程分为哪几类?使用存储过程有什么好处? 答:存储过程是一系列预先编辑好的、能实现特定数据操作功能的SQL 代码集,它与特定的数据库相关联,存储在SQL Server 服务器上。用户可以像使用函数一样重复调用这些存储过程,实现它所定义的操作。 存储过程分为3类:系统提供的存储过程、用户定义的存储过程和扩展存储过程。使用存储过程有如下好处如下: (1)存储过程提供了处理复杂任务的能力:存储过程提供了许多标准SQL 语言所没有的高级特性,通过传递参数和执行逻辑表达式,能够处理复杂任务。 (2)增强代码的重用性和共享性:每一个存储过程可以在系统中重复地调用,可以被多个有访问权限的用户访问。存储过程可以增强代码的重用性和共享性,加快应用系统的开发速度,提高开发的质量和效率。 (3)减少网络数据流量:存储过程是存放在服务器中并在服务器上运行的,应用系统调用存储过程时只有触发执行存储过程的命令和执行结束返回的结果在网络中传输。所以,使用存储过程可以减少网络中的数据流量。 (4)加快系统运行速度:第一次执行后的存储过程会驻留在内存中,以后可以直接运行,从而加快应用系统的处理速度。 (5)加强系统安全性:SQL Server 可以不授予用户某些表、视图的访问权限,但授予用户执行存储过程的权限,通过存储过程来对这些表或视图进行访问操作。从而保证表中数据的安全性。 2.修改存储过程有哪几种方法?假设有一个存储过程需要修改但又不希望影响现有的权限,应使用哪个语句来进行修改? 答:修改存储过程有两种方法:一种方法是把旧的存储过程删除,然后再重新建立该存储过程。另一种方法是用单个的步骤更改该存储过程。使用前一种方法修改存储过程,所有与该存储过程相关联的权限都将丢失。而使用后一种方法可以更改过程或参数定义,但为该存储过程定义的权限将保留。所以要修改一个存储过程但又不希望影响现有的权限第 章 10

实训11存储过程

实训11存储过程 班级:学号:姓名:日期: 实验项目: 1.简单存储过程的创建和执行 2.使用输入参数存储过程的创建和执行 3.使用输出参数存储过程的创建和执行 任务1:创建并执行带有输入参数的基于插入操作的存储过程。 要求:用于在KC表中插入一条新的课程信息,课程信息由变量形式给出。 任务2:创建并执行带有输入参数的基于更新操作的存储过程。 要求:用于在XS_KC表中将指定课程成绩大于55小于60的都提高到60分,课程号由输入参数指定。 任务3:创建并执行带有输入参数和输出参数的存储过程。 要求:输入参数用于指定学号信息,输出参数用于保存该学生的姓名、性别、专业名和所在系信息。 任务1: use xscj go create procedure p1 @kch char(3), @kcm varchar(20), @skjs varchar(10), @kcxq tinyint, @xs tinyint, @xf tinyint as insert kc values(@kch, @kcm, @skjs, @kcxq, @xs, @xf) go exec p1 '115','数据库基础','张玲',2,64,4 任务2: create proc p2 @kch char(3) as update xs_kc set 成绩=60 where 课程号=@kch and (成绩>=55 and 成绩<60) go declare @kch char(3) select @kch='103' exec p2 @kch go select * from xs_kc where 课程号=@kch 任务3: create proc p3

相关文档
相关文档 最新文档