美文网首页我爱编程
2016-02-1-Oracle-plsql-1

2016-02-1-Oracle-plsql-1

作者: 大雪封山十几年 | 来源:发表于2016-02-18 10:14 被阅读0次

layout: post
title: 游标、触发器和存储过程
date: 2016-1-18
categories: blog
tags: [数据库]
description: 通过Q&A的方式了解游标、触发器和存储过程中的常见问题。


Q:1. 简述触发器与存储过程的关系
Answer:
触发器是一种特殊的存储过程,当指定的事件发生时自动运行。触发器与普通存储过程的不同之处在于:触发器的执行是由事件触发的,而普通存储过程是由命令调用执行的。

Q:2. 使用显式游标的4个步骤。
Answer
①声明游标 ②打开游标 ③读取数据 ④关闭游标

Q:3. Oracle游标的四个属性。
Answer:
3.%ISOPEN %FOUND %NOTFOUND %ROWCOUNT

Q:4. 简述Oracle游标四个属性的作用。
Answer:
%ISOPEN属性判断游标是否被打开,如果游标被打开,则%ISOPEN等于TRUE,否则等于FALSE。
%FOUND和%NOTFOUND属性判断游标所在的行是否有效,如果有效,则%FOUND等于TURE,否则%FOUND等于FALSE,%NOTFOUND与%FOUND功能正好相反。
%ROWCOUNT属性返回到当前位置为止游标读取的记录行数。

Q:5. 区分触发器的三个因素。
Answer
触发事件 触发时间 触发级别

Q:6. 一个PL/SQL块有哪几部分组成?哪些是必须的?哪些是可选的?
Answer:
一个PL/SQL块由3个部分组成:声明部分,执行部分和异常处理部分。其中执行部分是必须的,而声明部分和异常处理部分是可选的。

Q:7. 处理用户自定义异常的步骤有哪些?
Answer
处理用户自定义异常的步骤:定义异常,触发异常,异常处理。

Q:8. 比较存储过程和函数的异同。
Answer:
相同点:存储过程和存储函数都能完成特定的操作。
不同点:存储函数主要目的是为了返回一个值,存储过程可以使用OUT参数返回一个或多个值,也可以不返回值;存储过程使用语句格式进行调用,而存储函数只能在表达式中进行调用。

Q:9. 哪个系统表存储了本方案存储过程、函数和触发器的信息?
Answer:
USER_SOURCE

Q:10. 简述游标的作用。
Answer:
使用游标技术可以方便地对查询结果集中的多行数据进行逐行处理。

Q:11. 触发器的作用,什么时候用触发器,创建触发器的步骤,触发器里是否可以有commit, 为什么?
Answer:
触发器是可以由事件来启动运行的,存在于数据库服务器中的一个过程。
它的作用:可以实现一般的约束无法完成的复杂约束,从而实现更为复杂的完整性要求。
使用触发器并不存在严格的限定,只要用户想在无人工参与的情况下完成一般的定义约束不可以完成的约束,来保证数据库完整性,那么就可以使用触发器。 由于触发器主要是用来保证数据库的完整性的,所以要创建一个触发器,首先要明确该触发器应该属于那一种(DML,INSTEAD OF,SYSTEM)因为他们各有个的 用途;其次就是要确定触发器被触发以后所设计到的数据。 出发器中不可以使用COMMIT。

Q:12. 游标的作用?如何知道游标已经到了最后?
Answer:
游标用于定位结果集的行,通过判断全局变量@@FETCH_STATUS可以判断是否到了最后,通常此变量不等于0表示出错或到了最后。

Q:13. 触发器分为事前触发和事后触发,这两种触发有何区别?语句级触发和行级触发有何区别?
Answer:
事前触发器运行于触发事件发生之前,而事后触发器运行于触发事件发生之后。通常事前触发器可以获取事件之前和新的字段值。语句级触发器可以在语句执行前或后执行,而行级触发在触发器所影响的每一行触发一次

Q:14. 简述存储过程的优缺点
Answer:
14.优点:1. 更快的执行速度:存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度;

  1. 与事务的结合,提供更好的解决方案:当对数据库进行复杂操作时(如对多个表进行Update、Insert、Query和Delete时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用;
  2. 支持代码重用:存储过程可以重复使用,可减少数据库开发人员的工作量;
  3. 安全性高:可设定只有某此用户才具有对指定存储过程的使用权。
    缺点:1. 如果更改范围大到需要对输入存储过程的参数进行更改,或者要更改由其返回的数据,则您仍需要更新程序集中的代码以添加参数、更新GetValue() 调用,等等,这时候估计比较繁琐了。
  4. 可移植性差由于存储过程将应用程序绑定到SQL Server,因此使用存储过程封装业务逻辑将限制应用程序的可移植性。如果应用程序的可移植性在您的环境中非常重要,则将业务逻辑封装在不特定于RDBMS 的中间层中可能是一个更佳的选择。

Q:15. 什么是存储过程,为什么要使用存储过程?
Answer:
15.存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。
(1)存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般 SQL 语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。
(2)当对数据库进行复杂操作时(如对多个表进行 Update,Insert,Query,Delete 时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。这些操作,如果用程序来完成,就变成了一条条的 SQL 语句,可能要多次连接数据库。而换成存储,只需要连接一次数据库就可以了。
(3)存储过程可以重复使用,可减少数据库开发人员的工作量。
(4)安全性高,可设定只有某此用户才具有对指定存储过程的使用权。\

Q:16. 描述一个触发器包括哪几部分及其作用?
Answer:
16.触发器主要由触发器名称、触发语句 、触发时间、触发事件、触发级别等组成。
(1)触发器名:触发器对象的名称。由于触发器是数据库自动执行的,因此该名称只是一个名称,没有实质的用途。
(2)触发时间:指明触发器何时执行,该值可取:
BEFORE---表示在数据库动作之前触发器执行;
AFTER---表示在数据库动作之后出发器执行。
(3)触发事件:指明哪些数据库动作会触发此触发器,具体有:
INSERT:数据库插入会触发此触发器;
UPDATE:数据库修改会触发此触发器;
DELETE:数据库删除会触发此触发器。

  1. Oracle 11g有几种触发器,它们的作用是什么?

Q:17.Oracle主要有三种触发器:DML触发器,instead-of触发器和系统触发器。
Answer:
(1)DML触发器由DML语句触发,语句的类型确定DML触发器的类型,可以定义为INSERT,UPDATE,DELETE操作,可以在操作之前或之后被触发。
(2)instead-of触发器定义在view上,它允许修改一个本来不可修改的视图。INSTEAD OF 触发器是在视图上而不是在表上定义的触发器,它是用来替换所使用实际语句的触发器。
(3)系统触发器在DDL事件或者数据库事件(比如用户登陆注销,服务器错误等等)上触发。
系统触发器分模式触发器和数据库触发器,模式触发器只有当前的触发事件以指定模式发生时才会触发,可以在模式级的操作上建立触发器,如:create ,alter,drop,grant,revoke 和truncate 等 DDL语句,如果触发器使用ON SCHEMA,该触发器属于模式触发器,如果使用ON DATABASE的话,就不依赖于模式属于数据库触发器,所有的用户都会触发。

Q:18. 比较触发器与存储过程的异同点。
Answer:
触发器与存储过程的主要区别在于触发器的运行方式。存储过程必须有用户、应用程序或者触发器来显示的调用并执行,而触发器是当特定时间出现的时候,自动执行或者激活的,与连接用数据库中的用户、或者应用程序无关。当一行被插入、更新或者删除时触发器才执行,同时还取决于触发器是怎样创建的,当UPDATE发生时使用一个更新触发器,当INSERT发生时使用一个插入触发器,当DELETE发生时使用一个删除触发器。

Q:19. 简要介绍游标的操作顺序。
Answer:
(1)声明游标,使用查询来定义游标的列和行;
(2)打开游标,使用PL/SQL命令OPEN来打开一个声明的游标;
(3)提取数据,从游标中重复提取每条记录到数据结构中,直到数据集合被提交;
(4)关闭游标,使用完游标后将其关闭。

相关文章

网友评论

    本文标题:2016-02-1-Oracle-plsql-1

    本文链接:https://www.haomeiwen.com/subject/zhpmkttx.html