第10章 存储过程
数据库应用技术——SQLServer2008篇第3版习题答案作者延霞徐守祥习题参考答案

第一章:1、订单管理系统的功能有哪些?答:订单管理系统的功能主要有客户查询商品信息、客户预订商品并提交订单、销售人员处理客户的订单信息、销售人员管理商品信息、客户信息等。
2、说明ER模型的作用?答:ER模型(实体关系模型)是描述概念世界,建立概念世界的工具,ER方法把管理系统所要描述的问题划分为单个的实体,通过实体间的联系实现有效、自然地模拟现实世界。
3、什么是关系模型?关系的完整性包括哪些内容?答:关系模型就是用二维表格结构来表示实体及实体之间联系的模型,关系模型包括四类完整性:域完整性、实体完整性、参照完整性和用户定义的完整性。
4、按照功能,SQL语言分为哪4部分?答:按照功能,SQL语言分为数据定义语言、查询语言、数据操纵语言、数据控制语言。
5、规范化范式是依据什么来划分的?它与一事一地的原则有什么联系?答:规范化范式根据一个关系满足数据依赖的程度不同,可规范化为第一范式(1NF)、第二范式(2NF)、第三范式(3NF)。
规范化范式遵循一事一地的原则,将描述一个独立事物的属性组成一个关系。
第二章:1、SQL Server2008有哪些新增特性?答:见教材17页2、SQL Server2008安装的软件和硬件环境是什么?答:参见教材表2-3、2-4、2-5、2-6。
3、SQL Server2008有哪些版本?有哪些服务组件?答:Microsoft SQL Server2008系统提供了多个不同的版本,不同的应用需求,往往需要安装不同的版本。
既有32位的版本,也有64位的版本,既有正式使用的服务器版本,也有满足特殊需要的专业版本。
其中,服务器版本包括了企业版和标准版,专业版本主要包括开发人员版、工作组版、Web版、Express版、Compact版等。
另外,还有企业评估版。
服务组件主要有SQL Server数据库引擎、Analysis Services、Reporting Services、Notification Services、Integration Services等。
第10章目标程序运行时的存储组织

p3活动记录 存取链(静态链) 控制链(动态链)
p3活动记录 存取链(静态链) 控制链(动态链)
main活动记录
2、用Display表
Display表---嵌套层次显示表 当前激活过程的层次为K,它的Display表含有K+1个
单元,依次存放着现行层,直接外层…直至最外层的每 一过程的最新活动记录的基地址。 说明:1、由于过程的层数可以静态确定,因此每个过程 的Display表的体积在编译时即可以确定。
Q的 活动记录
P的 活动记录 主程序的 活动记录
DISPLAY表பைடு நூலகம்维护和建立
为便于组织存储区,将display作为活动记录的一 部分,其相对地址在编译时是完全可以确定的。
假设过程P1可调用P2,为了能在P2中建立P2的 display,在P1调用P2时设法把P1的display地址 作为连接数据之一(全局display地址)传送给P2, 因此连接数据包括: 老SP值(动态链) 返回地址 全局display地址
嵌套过程的栈式分配方案
分程序结构的存储分配方案
3、过程活动:一个过程的活动指的是该过程的一次执行。
4、活动记录:一个过程的一次执行所需要的信息使用一个连 续的存储区来管理,这个区(块)叫做一个活动记录。
活动记录一般包含:
(1)连接数据
返回地址—调用过程指令的下一条指令的地址。
动态链(控制链)—指向调用该过程活动记录地址的指针。用 于当调用返回时,将当前栈顶正确切换到调用者的活动记录
2、某过程p是在层次为i的过程q内定义的,并且q是 包围p的直接外层,那么p的过程层数为i+1。
例: program main(i,0);
Oracle_PLSQL教程-第十章

翻译:陈拓 chentuo@2006 年 6 月16 日更多触发器概念Copyright © Oracle Corporation, 2001. All rights reserved.进度表: 时间 主题80 分钟 讲演40 分钟 练习120 分钟 总共目标完成本课程后, 您应当能够:• 创建附加的数据库触发器• 解释触发器管理规则• 实现触发器102 Copyright © Oracle Corporation, 2001. All rights reserved.本课目标在本课中,你将学习怎样创建更多地数据库触发器并学习规则触发器。
你还将学习许多应用程序触发器。
创建数据库触发器• 触发用户事件:– CREATE, ALTER 或 DROP– Logging on 或 off• 触发数据库或系统事件:– Shutting down 或 starting up 数据库– 一个指定的错误 (或任何错误) 出现103 Copyright © Oracle Corporation, 2001. All rights reserved.创建数据库触发器在编码触发器体之前,确定触发器的组建。
在系统事件上的触发器可以被定义在数据库或方案级别。
例如,一个数据库 shutdown 触发器 被定义在数据库级别。
在数据定义语言 (DDL) 语句上的触发器,或一个用户登录登出,即可以被 定义为数据库级别也可以被定义为方案级别。
在 DML 语句上的触发器被定义在指定的表或一个视图上。
一个定义在数据库级别的触发器对所有用户触发, 一个定义在方案或表级别的触发器只有当触 发级别包括该方案或表时才触发。
触发事件可能引起触发器触发:· 在数据库或方案中的一个对象上一个数据定义语句· 一个指定的用户 (或任何用户) 登录或登出· 一个数据库关闭或启动· 一个指定的或任何错误出现在 DDL 语句上创建触发器• 语法:CREATE [OR REPLACE] TRIGGER trigger_nametiming[ddl_event1 [OR ddl_event2 OR ...]]ON {DATABASE|SCHEMA}trigger_body104 Copyright © Oracle Corporation, 2001. All rights reserved.创建触发器语法DDL 事件 可能的值CREATE无论何时一个 CREATE 语句添加一个新的数据库对象到数据字典中时,引起 Oracle 服务器激发触发器ALTER无论何时一个 ALTER 语句修改一个在数据字典中的数据库对象时,引起 Oracle 服务器激发触发器DROP无论何时一个 DROP 语句删除一个在数据字典中的数据库对象时,引起Oracle 服务器激发触发器触发器体代表一个完整的 PL/SQL 块。
第11章 存储过程汇总

11.存储过程本章主题●什么是存储过程●创建存储过程●细说CREATE PROCEDURE命令●执行存储过程●重命名存储过程●修改存储过程●删除存储过程必杀技!不可不学!学习如何使用SQL来写stored procedure11.1. 什么是存储过程经过前四章的洗礼,相信您对Microsoft SQL Server程序设计已有了基本的认识。
第07章Transact-SQL程序设计第08章数据的查询、汇总、统计和分析第09章添加、修改和删除数据记录第10章视图本章开始更高级的内容。
存储过程包含一些Transact-SQL语句,并以特定的名称存储在数据库中。
存储过程是一种数据库对象。
可以在存储过程中声明变量、有条件执行以及其他各项强大的程序设计功能。
●它能够包含执行各项数据库操作的语句,并且可以调用其他的存储过程。
●能够接收输入参数并以输出参数的形式将多个数据值返回给调用程序。
具体示例:试着看看,看得懂吗?后面会详细介绍CREATE PROCEDURE getPerson @mName varchar(10), @mCur_salary moneyASUPDATE vfpmanSET cur_salary= cur_salary*1.2WHERE name=@mName AND cur_salary=@mCur_salary11.1.1.存储过程的优点●允许模块化程序设计●更快的执行速度,存储过程被预先编译和优化并存储在数据库中●有效降低网络流量●较好的安全,如限制某人对某个表操作,却又必须要求他对该表执行特定的操作。
11.2. 创建存储过程C R E AT E P R O C ED U R E命令在查询分析器中执行命令。
11.3. 细说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 ];number是可选的整数,用来对同名的过程分组,以便用一条 DROP PROCEDURE 语句即可将同组的过程一起除去。
《Oracle数据库应用与实践》课后习题参考答案

第 5 章 Oracle 模式对象
一、填空题
1. 字段级约束 表约束
2. NOT NULL 约束 UNIQUE 约束 PRIMARY KEY 约束
束
3. CREATE TABLE
CREATE ANY TABLE
4. UNIQUE PRIMARY KEY CHECK
5. 合并索引 重建索引
6. user_updatable_columns
一、 填空题 1. 数据挖掘 隐含的 未知的 2. API-ODM Java API ODM DBMS_DM PL/SQL API
3. Clustering Association Feature Extraction
Oracle 数据库应用与实践
2、某 cc 表数据如下: c1 c2 -------------1西 1安 1的 2天 2气
Oracle 数据库应用与实践
3好 …… 转换为 1 西安的 2 天气 3好 要求:不能改变表结构及数据内容,仅在最后通过 SELECT 显示出这个查询结果
代码为: create or replace function x return varchar2 is type t_array is table of number index by binary_integer; type tarray is table of varchar2(10) index by binary_integer; ta t_array; tar tarray; re varchar2(10); n number; na varchar2(10); begin select id bulk collect into ta from (select id,name from xx order by id) group by id; for i in st loop dbms_output.put(ta(i)||' '); select name bulk collect into tar from xx where id=ta(i); for i in st loop dbms_output.put(tar(i)); end loop; dbms_output.put_line(' '); end loop; return re; end;
Oracle12c中文版数据库管理、应用与开发实践教程附录思考与练习答案

二、选择题
1.A 3.A
2.B 4.C
5.A
第 7 章 PL/SQL 编程基础
一、填空题
1.DECLARE 3.%TYPE 5./ 7.隔离性
2.CONSTANT 4.120 6.GOTO
二、选择题
1.B 3.C 5.D
2.A 4.A
第 8 章 内置函数
一、填空题
1.123EFG321 2.G3 3.CONCAT() 4.TRUNC() 5.SYSDATE 6.DROP FUNCTION
二、选择题
1.B 3.C 5.A 7.A
2.A 4.B 6.C
第 12 章 其他的数据库对象
一、填空题
1.WITH CHECK OPTION 2.位图索引 3.NEXTVAL 4.私有 Oracle 同义词 5.相对文件号
附 录
411
412
Oracle 12c 中文版数据库管理、应用与开发实践教程
第 2 章 Oracle 数据库管理工具
一、填空题
1.1521 3.lsnrctl status 5.DEFINE
2.tnsnames.ora 4.DESC 6.DISCONNECT
二、选择题
1.C 3.C 5.C
2.D 4.A 6Leabharlann B第 5 章 多表查询和子查询
一、填空题
1.全外连接
2.自连接
3.INTERSECT 4.INNER JOIN
附录 思考与练习答案
第 1 章 Oracle 12c 简介
一、填空题
1.标准版 1 3.PGA 5.服务器进程
2.数据库主服务 4.数据库缓冲区 6.配置参数文件
二、选择题
第 4 章 单表查询
《MySQL数据库原理、设计与应用》第10章课后习题答案

第十章一、填空题1.92. e3.@,变量名4.REPEAT5.DELIMITER二、判断题1.错2.错3.对4.对5.对三、选择题1. A2. D3. D4. C5. B四、简答题1.请简述存储过程和函数的区别。
答:(1)语法中实现的标识符不同,存储过程使用PROCEDURE,函数为FUNCTION。
(2)存储过程在创建时没有返回值,而函数在定义时必须设置返回值。
(3)存储过程没有返回值类型,且不能将结果直接赋值给变量;而函数定义时需要设置返回值类型,且在调用时除在SELECT中,必须将返回值赋给变量。
(4)存储过程必须通过CALL进行调用,不能使用SELECT调用;而函数则可在SELECT语句中直接使用。
2.请说一说触发器以及其作用。
答:概念:触发器可以看作是一种特殊类型的存储过程,在预先定义好的事件(如INSERT、DELETE等操作)发生时,才会被MySQL自动调用。
作用:①触发器可以通过数据库中的相关表实现级联无痕更改操作。
②保证数据安全,进行安全校验五、实训题11. 请在shop数据库中创建一个存储过程,以订单编号为参数,输出该订单的商品信息。
mysql> DELIMITER $$mysql> CREATE PROCEDURE shop.order_proc(IN order_id INT )-> BEGIN-> SELECT g.id, FROM sh_goods g-> LEFT JOIN sh_order_goods og ON g.id = og.goods_id-> WHERE og.order_id = order_id;-> END-> $$Query OK, 0 rows affected (0.01 sec)mysql> DELIMITER ;2. shop.sh_order_goods表上创建一个触发器,当添加订单-商品信息时,修改sh_goods表中对应商品的库存量。
MySQL数据库技术与应用(慕课版)课后习题答案

第1章数据库概述1.填空题(1)Oracle(2)U 1U 2U 4U(3)体积小、安装成本低、速度快、源码开放(4)Memcached、Redis、mongoDB(5)大、中、小型网站中2.选择题(1)A(2)B(3)A(4)A(5)D3.简答题(1)常见的关系型数据库有MySQL、Oracle、SQL Server和Access数据库。
MySQL数据库主要应用在广泛地应用到互联网上的大、中、小型网站中;Oracle数据库主要应用在传统大企业、政府机构、金融机构、证券机构等;SQL Server数据库主要应用在部分电商和使用Windows 服务器平台的企业;Access数据库早期应用于小型程序系统ASP + Access、系统留言板、校友录等。
(2)关系型数据库按照结构化的方法存储数据,具备纵向扩展能力,采用结构化查询语言,强调ACID规则,强调数据的强一致性,可以控制事务原子性细粒度,并且一旦操作有误或者有需要,可以回滚事务。
非关系型数据库不需要固定的表结构,一般情况下也不存在对数据的连续操作。
不同点:关系型数据库使用表结构,非关系型的数据库格式灵活。
关系型数据库支持SQL语言,支持事务,非关系型数据库不提供SQL语言,无事务处理。
相对于关系型数据库,非关系型数据库在大数据存取上具备无法比拟的性能优势。
(3)应该注意MySQL的版本和开发人员使用的版本。
第2章环境的安装与基本配置1.填空题(1)Ubuntu CentOS Red Hat(2)RPM包二进制包源码包(3)仅主机模式NAT模式桥接模式(4)数据库语言(5)Mysqladmin、mysqldump等命令2.选择题(1)A(2)B(3)B(4)D(5)D3.简答题(1)在企业中应该使用源码编译方式安装MySQL,使用源码安装在编译安装过程可以设定参数,按照需求,进行安装,并且安装的版本,可以自己选择,灵活性比较大。
(2)VMware虚拟平台提供3种网络模式。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第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 sysobjectsWHERE name = 'stud_degree' AND type ='P')DROP PROCEDURE stud_degreeGOUSE schoolGO--创建存储过程stud_degreeCREATE PROCEDURE stud_degreeASSELECT student.sno,student.sname,ame,score.degreeFROM student,course,scoreWHERE student.sno=score.sno AND o=oORDER BY student.snoGO通过下述SQL语句执行该存储过程:USE school--判断stud_degree存储过程是否存在,若存在,则执行它IF EXISTS (SELECT name FROM sysobjectsWHERE name = 'stud_degree' AND type ='P')EXEC stud_degree /*执行存储过程stud_degree*/GO执行结果为:sno sname cname degree----- -------- ------------- --------------------101 李军计算机导论 64101 李军数字电路 85103 陆君计算机导论 92103 陆君操作系统 86105 匡明计算机导论 88105 匡明操作系统 75107 王丽计算机导论 91107 王丽数字电路 79108 曾华计算机导论 78108 曾华数字电路 81109 王芳计算机导论 76109 王芳操作系统 68创建存储过程时应该注意下面几点:存储过程的最大大小为128MB。
用户定义的存储过程只能在当前数据库中创建(临时过程除外,临时过程总是在tempdb中创建)。
在单个批处理中,CREATE PROCEDURE语句不能与其他Transact-SQL语句组合使用。
存储过程可以嵌套使用,在一个存储过程中可以调用其他的存储过程。
嵌套的最大深度不能超过32层。
存储过程如果创建了临时表,则该临时表只能用于该存储过程,而且当存储过程执行完毕后,临时表自动被删除。
创建存储过程时,“sq_statement”不能包含下面的Transact-SQL语句:SET SHOWPLAN_TEXT、SETSHOWMAN_ALL、CREATE VIEW、CREATE DEFAULT、CREATE RULE、CREATE PROCEDURE和CREATETRIGGER。
SQL Server允许创建的存储过程引用尚不存在的对象。
在创建时,只进行语法检查。
执行时,如果高速缓存中尚无有效的计划,则编译存储过程以生成执行计划。
只有在编译过程中才解析存储过程中引用的所有对象。
因此,如果语法正确的存储过程引用了不存在的对象,则仍可以成功创建;但在运行时将失败,因为所引用的对象不存在。
2.使用企业管理器创建存储过程使用企业管理器创建存储过程的操作步骤如下:(1) 打开企业管理器,展开服务器组,并展开相应的服务器。
(2) 打开“数据库”文件夹,并打开要创建存储过程的数据库。
(3) 选择“存储过程”选项,右击鼠标,执行“新建存储过程”命令,打开创建存储过程对话框,如图10.1所示。
图10.1创建存储过程(4) 在“文本”列表框中显示了CREATE PROCEDURE语句的框架,可以修改要创建的存储过程的名称,然后加入存储过程所包含的SQL语句。
(5) 单击“检查语法”按钮可以检查创建存储过程的SQL语句的语法是否正确。
(6) 如果要将其设置为下次创建存储过程的模板,可单击“另存为模板”按钮。
(7) 完成后,单击“确定”按钮即可创建一个存储过程。
3.使用向导创建SQL Server 2000还提供了创建存储过程的向导.【例10.2】 使用向导创建一个存储过程insert_table8_1,对应的操作步骤如下:(1) 在企业管理器中,执行“工具”下拉菜单中的“向导”命令,打开“选择向导”对话框,如图10.2所示。
(2) 在“数据库”文件夹选择“创建存储过程”向导,单击“确定”按钮,出现创建存储过程向导欢迎对话框。
(3) 单击“下一步”按钮,出现选择数据库对话框,如图10.3所示。
(4) 选择数据库后,单击“下一步”按钮,出现选择存储过程对话框,如图10.4所示。
图10.2 “选择向导”对话框图10.3选择数据库图10.4 选择存储过程在此对话框中,列出了所有表,以及可以对表进行的插入、删除和更新操作。
可以通过选中每个表对应的复选框来确定要对表进行的操作。
例如,选择table8表后面的“插入”栏中的复选框。
(5) 单击“下一步”按钮,出现完成创建存储过程对话框,如图10.5所示。
若单击“完成”按钮,即可完成存储过程的创建。
(6) 单击“编辑”按钮,可编辑存储过程,如图10.6所示。
图10.5 完成创建存储过程图10.6 编辑存储过程(7) 单击“编辑SQL”按钮,即可打开“编辑存储过程SQL”对话框,其中的列表框显示了创建该存储过程的Transact-SQL语句,如图10.7所示。
可以在已有的Transact-SQL语句的基础上进行编辑,可以单击“分析”按钮来执行语法检查。
(8) 单击“确定”按钮,返回到图10.5所示的对话框。
图10.7 “编辑存储过程SQL”对话框10.3执行存储过程执行存储过程使用EXECUTE语句,其完整语法格式如下:[ [ EXEC[UTE] ][ @return_status = ]{ procedure_name [ ;number ] | @procedure_name_var } [ [ @parameter = ] { value | @variable [ OUTPUT ] | [ DEFAULT ] ][ ,…n ][ WITH RECOMPILE ]各参数含义如下:@return_status 是一个可选的整型变量,保存存储过程的返回状态。
这个变量在用于EXECUTE 语句前,必须在批处理、存储过程或函数中声明过。
procedure_name 是调用的存储过程的名称。
过程名称必须符合标识符规则。
无论服务器的代码页或排序方式如何,扩展存储过程的名称总是区分大小写。
;number 是可选的整数,用于将相同名称的过程进行组合,使得它们可以用一句 DROP PROCEDURE 语句除去。
该参数不能用于扩展存储过程。
@procedure_name_var 是局部定义变量名,代表存储过程名称。