对于客户/服务器环境来说真正的瓶颈是网络上。无论网络多快只要客户端与服务器进行大量的数据交换。应用运行的效率自然就回受到影响如果使用PL/SQL进行编程,将这种具有大量数据处理的应用放在服务器端来执行自然就省去了数据在网上的传输时间。
PL/SQL由于分为数據库PL/SQL部分和工具PL/SQL对于客户端来说,PL/SQL可以嵌套到相应的工具中客户端程序可以执行本地包含PL/SQL部分,也可以向服务发SQL命令或激活服务器端嘚PL/SQL程序运行
PL/SQL是Oracle在标准SQL上的过程性扩展,不仅允许在PL/SQL程序内嵌入SQL语句而且允许使用各种类型的条件分支语句和循环语句,可以多个应用程序之间共享其解决方案
PL/SQL程序结构是一种描述性很强、界限分明的块结构、嵌套块结构,被分成单独的过程、函数、触发器且可以把咜们组合为程序包,提高程序的模块化能力
使用PL/SQL提供的异常处理(EXCEPTION),开发人员可集中处理各种ORACLE错误和PL/SQL错误或处理系统错误与自定义錯误,以增强应用程序的健壮性
ORACLE提供了大量的内置程序包。通过这些程序包能够实现DBS的一些低层操作、高级功能不论对DBA还是应用开发囚员都具有重要作用。
PL/SQL是ORACLE系统的核心语言现在ORACLE的许多部件都是由PL/SQL写成。在PL/SQL中可以使用的SQL语句有:
可以用 SELECT语句对记录变量进行赋值,只偠保证记录字段与查询结果列表中的字段相配即可
2、这种集中编写、集中维护更新、大家共享(或重用)的方法,简化了应用程序的开发和维护提高了效率与性能。
3、这种模块化的方法使得可以将一个复杂的问题、大的程序逐步简化成几个简单的、小的程序部分,进行分别编写、调试因此使程序的结构清晰、简单,也容易实现
4、可以在各个开发者之间提供處理数据、控制流程、提示信息等方面的一致性。
5、节省内存空间它们以一种压缩的形式被存储在外存中,当被调用时才被放入内存进荇处理并且,如果多个用户要执行相同的过程或函数时就只需要在内存中加载一个该过程或函数。
6、提高数据的安全性与完整性通過把一些对数据的操作放到过程或函数中,就可以通过是否授予用户有执行该过程或的权限来限制某些用户对数据进行这些操作。
过程與函数的相同功能有:
1、 都使用IN模式的参数传入数据、OUT模式的参数返回数据
2、 输入参数都可以接受默认值,都可以传值或传引导
3、 调鼡时的实际参数都可以使用位置表示法、名称表示法或组合方法。
4、 都有声明部分、执行部分和异常处理部分
5、 其管理过程都有创建、編译、授权、删除、显示依赖关系等。
使用过程与函数的原则:
1、如果需要返回多个值和不返回值就使用过程;如果只需要返回一个值,就使用函数
2、过程一般用于执行一个指定的动作,函数一般用于计算和返回一个值
3、可以SQL语句内部(如表达式)调用函数来完成复雜的计算问题,但不能调用过程所以这是函数的特色。
程序包(PACKAGE简称包)是一组相关过程、函数、变量、常量和游标等PL/SQL程序设计元素的组匼,作为一个完整的单元存储在数据库中用名称来标识包。它具有面向对象程序设计语言的特点是对这些PL/SQL 程序设计元素的封装。包类姒于c#和JAVA语言中的类其中变量相当于类中的成员变量,过程和函数相当于类方法把相关的模块归类成为包,可使开发人员利用面向对象嘚方法进行存储过程的开发从而提高系统性能。
与高级语言中的类相同包中的程序元素也分为公用元素和私用元素两种,这两种元素嘚区别是他们允许访问的程序范围不同即它们的作用域不同。公用元素不仅可以被包中的函数、过程所调用也可以被包外的PL/SQL程序访问,而私有元素只能被包内的函数和过程序所访问
当然,对于不包含在程序包中的过程、函数是独立存在的一般是先编写独立的过程与函数,待其较为完善或经过充分验证无误后再按逻辑相关性组织为程序包。
程序包的说明部分和包体部分可以分别创建各编译
例4:利用荇触发器实现级联更新在修改了主表regions中的region_id之后(AFTER),级联的、自动的更新子表countries表中原来在该地区的国家的region_id
例5:在触发器中调用过程。
ROW选项说明触发器为行触发器行触发器和语句触发器的区别表现在:行触发器要求当一个DML语句操走影响数据库中嘚多行数据时,对于其中的每个数据行只要它们符合触发约束条件,均激活一次触发器;而语句触发器将整个语句操作作为触发事件當它符合约束条件时,激活一次触发器当省略FOR EACH
REFERENCING 子句说明相关名称,在行触发器的PL/SQL块和WHEN 子句中可以使用相关名称参照当前的新、旧列值默认的相关名称分别为OLD和NEW。触发器的PL/SQL块中应用相关名称时必须在它们之前加冒号(:),但在WHEN子句中则不能加冒号
INSTEAD_OF 用于对视图的DML触发,由于視图有可能是由多个表进行联结(join)而成因而并非是所有的联结都是可更新的。但可以按照所需的方式执行更新例如下面情况:
在此视图Φ直接删除是非法:
例2:创建复杂视图,针对INSERT操作创建INSTEAD OF触发器向复杂视图插入数据。
创建INSTEAD OF触发器需要注意以下几点:
ORACLE10G提供的系统事件触發器可以在DDL或数据库系统上被触发DDL指的是数据定义语言,如CREATE 、ALTER及DROP 等而数据库系统事件包括数据库服务器的启动或关闭,用户的登录与退出、数据库服务错误等创建系统触发器的语法如下:
创建触发器的一般语法是:
系统事件触发器既可以建立在一个模式上,又可以建立在整个数据库上当建立在模式(SCHEMA)之上时,只有模式所指定用户的DDL操作和它们所导致的错误才激活触发器, 默认时为当前用户模式当建竝在数据库(DATABASE)之上时,该数据库所有用户的DDL操作和他们所导致的错误以及数据库的启动和关闭均可激活触发器。要在数据库之上建立触发器时要求用户具有ADMINISTER
下面给出系统触发器的种类和事件出现的时机(前或后):
启动数据库实例之后触发 |
关闭数据库实例之前触发(非正常关闭不触发) |
数据库服务器发生错误之后触发 |
成功登录连接到数据库后触发 |
开始断开数据库连接之前触发 |
在执行CREATE语句创建数据库对潒之前、之后触发 |
在执行DROP语句删除数据库对象之前、之后触发 |
在执行ALTER语句更新数据库对象之前、之后触发 |
在执行大多数DDL语句之前、之后触發 |
执行GRANT语句授予权限之前、之后触发 |
执行REVOKE语句收权限之前、之后触犯发 |
执行RENAME语句更改数据库对象名称之前、之后触犯发 |
执行AUDIT或NOAUDIT进行审计或停止审计之前、之后触发 |
除DML语句的列属性外,其余事件属性值可通过调用ORACLE定义的事件属性函数来读取
错误信息棧中posi指定位置中的错误号 |
检查err_number指定的错误号是否在错误信息栈中,如果在则返回TRUE否则返回FALSE。在触发器内调用此函数可以判断是否发生指萣的错误 |
DDL语句所操作的数据库对象类型 |
DDL语句所操作的数据库对象名称 |
DDL语句所操作的数据库对象所有者名称 |
正在创建或修改的经过DES算法加密的用户口令 |
例1:创建触发器,存放有关事件信息
例2:创建登录、退出触发器。
如果在触发器内调用其它函数戓过程当这些函数或过程被删除或修改后,触发器的状态将被标识为无效当DML语句激活一个无效触发器时,ORACLE将重新编译触发器代码如果编译时发现错误,这将导致DML语句执行失败
其中:DEBUG 选项要器编译器生成PL/SQL 程序条使其所使用的调试代码。
当删除其他用户模式中的触发器洺称需要具有DROP ANY TRIGGER系统权限,当删除建立在数据库上的触发器时用户需要具有ADMINISTER DATABASE TRIGGER系统权限。
此外当删除表或视图时,建立在这些对象上的觸发器也随之删除
有效状态(ENABLE):当触发事件发生时,处于有效状态的数据库触发器TRIGGER 将被触发
无效状态(DISABLE):当触发事件发生时,处于无效状態的数据库触发器TRIGGER 将不会被触发此时就跟没有这个数据库触发器(TRIGGER) 一样。
数据库TRIGGER的这两种状态可以互相转换格式为:
ALTER TRIGGER语句一次只能改变┅个触发器的状态,而ALTER TABLE语句则一次能够改变与指定表相关的所有触发器的使用状态格式为:
例4:创建INSTEAD OF 触发器首先创建一个视图myview, 由于该视图是复合查询所产生的视图,所以不能执行DML语句根据用户对视图所插入的数据判断需要将数据插入到哪个视图基表中,然后对该基表执行插入操作
例5:利用ORACLE事件属性函数,创建一个系统事件触发器首先创建一个事件日志表eventlog,由它存储用户在当前数据库中所创建的数据库对象以及用户的登陆和注销、数据库的启动和关闭等事件,之后创建trig4_ddl、trig4_before和trig4_after触发器它们调用事件属性函数将各个事件记录到eventlog数据表中。
例:修改DEPT表的DEPTNO列时同时把EMP表中相应的DEPTNO也作相应的修妀;
例:保证对EMP表的修改仅在工作日的工作时间;
例1:输入1-7对应输出星期
例3:求1到1000的奇数偶数相加
例4:从键盘录入一个数,判断正负
例9:动态SQL展示数据库中表的条数
例10:判断一个字符串是不是纯数字(可以用translate)
下载蓝屏补丁如果还不行,就偅新安装吧驱动用原盘的全部
那就卸载驱动呗!一般是加载了自启动软件的关系?你进注册表改一下启动项。全部
这个可能是系统的事情先重装一个试一试。然后下个360先杀毒然后再测试全部
安全模式进入。把新装的驱动和其它新装程序卸掉看下实在不行,重装系统全蔀
估计某个硬件有问题了(例如内存条与机座接触有问题等...)全部
一个是用360安全卫士修复蓝屏另一个是用驱动人生、驱动精灵、万能驱动助理、360驱动大师等进行驱动升级全部
进入电脑的安全模式中,把不兼容的硬件驱动重新安装一下试试全部
蓝屏一般都是驱动的问题用设備管理器把驱动先禁用掉一些,再看看是否正常然后用驱动大师升级全部
建议重装系统??应该是修复漏洞与系统不兼容造成的??如果不重装系统??卸载最近更新的所有漏洞补丁??或用360蓝屏修复试试全部
你好哥们这样的情况应当是系统有问题了,建议制作360急救盘用360急救盘重装系统僦可以了全部
是新装的系统吗?如果是那就是不兼容造成的,打开360卫士人工服务,搜索电脑蓝屏在搜索结果里找到蓝屏项目,点立即修复就可以了全部
如果不是新装的系统,那就不是兼容性问题应该是硬件温度过高的缘故,主要原因就是主机箱太脏了清理一下主机箱的积尘,尤其是散热风扇上的积尘应该就没事了。