`
刘金剑
  • 浏览: 144902 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
文章列表
  第十二章 PL/SQL应用程序性能调优 一、PL/SQL性能问题的原由 当基于PL/SQL的应用程序执行效率低下时,通常是由于糟糕的SQL语句、编程方法,对PL/SQL基础掌握不好或是滥用共享内存造成的。 PL/SQL中糟糕的SQL语句 PL/SQL编程看起来相对比较简单,因为它们的复杂内容都隐藏在SQL语句中,SQL语句常常分担大量的工作。这就是为什么糟糕的SQL语句是执行效率低下的主要原因了。如果一个程序中包含很多糟糕的SQL语句,那么,无论PL/SQL语句写的有多么好都是无济于事的。 如果SQL语句降低了我们的程序速度的话,就要按下面列表中的方法分析一 ...
第十一章 本地动态SQL 一、什么是动态SQL 大多数PL/SQL都做着一件特殊的结果可预知的工作。例如,一个存储过程可能接受一个雇员的编号和他的提薪金额,然后更新表emp中的信息。在这种情况下,UPDATE的全部文本内容在编译期就完全确定下来,这样的语句不会随着程序的执行而发生变化。所以,称它们为静态SQL语句。 但是,有些程序只能是在运行时建立并处理不同的SQL语句。例如,一般用途的报告打印就可能会根据用户的选择内容不同,而使我们的SELECT内容也随之变化,然后打印出相应的数据来。这样的语句在编译期是无法确定它的内容的,所以称它们为动态SQL语句。 动态SQL语句是在运 ...
5、对象类型实例:实数 有理数能够表现成两个整数相除的形式,一个分子和一个分母。同大多数语言一样,PL/SQL并没有实数类型或是用于实数操作的预定义操作符。现在让我们就用对象类型来弥补这个缺失。首先,编写下面的对象说明: CREATE  TYPE  rational AS  OBJECT(   num   INTEGER ,   den   INTEGER ,   MAP MEMBER FUNCTION  CONVERT     RETURN  REAL ,   MEMBER PROCEDURE  normalize,   MEMBER FUNCT ...
第十章 PL/SQL对象类型 一、抽象的角色 抽象是对一个真实世界实体的高级描述或建模。它能排除掉无关的细节内容,使我们的日常生活更有条理。例如,驾驶一辆汽车时,我们是不需要知道它的发动机是如何工作的。由变速排档、方向盘、加速器和刹车组成的接口就能让我们有效地使用它。而其中每一项的详细信息对于日常驾驶来说并不重要。 抽象是编程的核心内容。例如,我们在隐藏一个复杂的算法时只要编写一个过程,然后为它传递参数就可以做到过程化抽象。如果需要改变具体的实现,换一个过程体即可。有了抽象后,那些调用过程的程序就不需要再修改了。 我们在指定变量的数据类型时,可以使用数据抽象。数据类型代表了 ...
九、系统包一览 Oracle和各种Oracle工具都提供了系统包来帮助我们建立基于PL/SQL的应用程序。例如,Oracle提供了许多工具包,下面介绍一下其中比较典型的包。 1、关于DBMS_ALERT包 DBMS_ALERT能让数据库触发器在特定的数据库值发生变化时向应用程序发送报警。报警是基于事务的并且是异步的(也就是它们的操作与定时机制无关)。例如,当新的股票和债券上市时公司就可以通过这个包更新来他的投资总额。 2、关于DBMS_OUTPUT包 包DBMS_OUTPUT能让我们显示来自PL/SQL块和子程序中的输出内容,这样就会很容易地进行测试和调试。过程put_li ...
第九章 PL/SQL包 一、什么是PL/SQL包 包就是一个把各种逻辑相关的类型、常量、变量、异常和子程序组合在一起的模式对象。包通常由两个部分组成:包说明和包体,但有时包体是不需要的。说明(简写为spec)是应用程序接口;它声明了可用的类型、变量、常量、异常、游标和子程序,包体部分完全定义游标和子程序,并对说明中的内容加以实现。 如下例所示,我们可以认为说明部分是一个可选接口,而包体是一个"黑盒"。我们可以调试、增强或替换一个包体而不同改变接口(包说明)。 我们可以从SQL*Plus中使用CREATE PACKAGE语句来创建一个包。语法如下 ...
第八章 PL/SQL子程序 一、什么是子程序 子程序就是能够接受参数并被其他程序所调用的命名PL/SQL块。PL/SQL子程序有两种类型,过程和函数。一般地,过程用于执行一个操作,而函数用于计算一个结果值。 与未命名或匿名PL/SQL块一样,子程序也有声明部分,执行部分和一个可选的异常处理部分。声明部分包含类型、游标、常量、变量、异常和嵌套子程序的声明。这些内容都是本地的,在程序退出时会自动销毁。执行部分包含赋值语句、流程控制语句和Oracle的数据操作语句。异常处理部分包含异常处理程序。思考下面用于记入借方银行账户的debit_account过程: PRO ...
八、处理PL/SQL异常 异常抛出时,PL/SQL块或子程序的正常执行就会停止,控制权转到块或子程序的异常处理部分,语法如下: EXCEPTION   WHEN  exception_name1 THEN    -- handler     sequence_of_statements1   WHEN  exception_name2 THEN    -- another handler     sequence_of_statements2     ...   WHEN  OTHERS  THEN    -- optional handler ...
第七章 控制PL/SQL错误 一、错误控制一览 在PL/SQL中,警告或错误被称为异常。异常可以是内部(运行时系统)定义的或是用户定义的。内部定义的案例包括除零操作和内存溢出等。一些常见的内部异常都有一个预定义的名字, ...
八、PL/SQL中的事务处理一览 在这里,我们学习一下,如何使用事务处理的基本技术来保证数据库的一致性,这其中包括如何提交或取消对数据库的改动。Oracle管理下的工作或任 务被称为会话。当我们运行应用程序或Oracle工具并 ...
其它的OPEN-FOR语句可以使用不同的查询打开同样的游标变量。在重新打开游标变量之前是不需要关闭它的(但对一个静态游标使用多次OPEN操作时,系统会抛出预定义异常CURSOR_ALREADY_OPEN)。为执行一个不同的查询而重新打开游标变量时,前面的查询结果就会丢失。 一般地,我们可以把游标变量传递给过程,然后由过程负责打开它,如下例,打包过程打开游标变量emp_cv: CREATE  PACKAGE  emp_data AS   ...   TYPE  empcurtyp IS  REF  CURSOR     RETURN  emp%ROWTYPE ...
第六章 PL/SQL与Oracle间交互 一、PL/SQL支持的SQL一览 PL/SQL扩展了SQL,变得更加强大和易用。我们可以用PL/SQL灵活安全地操作Oracle数据,因为它支持所有的SQL数据操作语句(除了EXPLAIN PLAN),事务控制语句,函数,伪列和操作符。PL/SQL还支持动态SQL,能让我们动态地执行SQL数据定义,数据控制和会话控制语句。除此之外, PL/SQL还遵循ANSI/ISO的SQL标准。 1、数据操作 我们可以使用INSERT、UPDATE、DELETE、SELECT和LOCK TABLE来操作Oracle数据。INSERT用于向数据 ...
十五、什么是记录 记录就是相关的数据项集中存储在一个单元中,每项都有它自己的名字和数据类型。假定我们有关于雇员的各种数据信息,如名字、薪水和雇佣日期,这些项在逻辑上是相关联的,但类型不相似。记录可以把它所拥有的每一项当作一个逻辑单元,这样就便于组织和表现信息。 %ROWTYPE属性能让我们声明代表数据表中一行记录的类型。但是我们不能利用它指定或声明自己的数据类型。不过没关系,RECORD关键字可以满足我们定义自己的记录的要求。 十六、定义和声明记录 要创建记录,我们就得先声明记录类型,然后声明该类型的记录。我们可以在PL/SQL块、子程序或包的声明部分使用下面的语法来定义RE ...
六、集合的赋值 集合可以用INSERT、UPDATE、FETCH或SELECT语句来赋值,也可以用赋值语句或调用子程序来赋值。 我们可以使用下面的语法来为某个指定的集合元素进行赋值: collection_name(subscript) := expression; 其中expression的值和被指定的元素类型必须一致。下面我们来看三个例子。 例一:数据的兼容性 例子中的集合与集合之间互相赋值,但必须是两个集合类型相同的才可以,光是元素的类型相同是不够的。 DECLARE   TYPE  clientele IS  VARRAY(1 ...
六、集合的赋值 集合可以用INSERT、UPDATE、FETCH或SELECT语句来赋值,也可以用赋值语句或调用子程序来赋值。 我们可以使用下面的语法来为某个指定的集合元素进行赋值: collection_name(subscript) := expression; 其中expression的值和被指定的元素类型必须一致。下面我们来看三个例子。 例一:数据的兼容性 例子中的集合与集合之间互相赋值,但必须是两个集合类型相同的才可以,光是元素的类型相同是不够的。 DECLARE   TYPE  clientele IS  VARRAY(1 ...
Global site tag (gtag.js) - Google Analytics