初学Oracle
数据库编程之过程化SQL
一、过程化SQL的块结构
定义部分 :
DECLARE /* 定义的变量,常量等只能在该基本快中使用 */
变量,常量,游标,异常等 /*当基本块执行结束时,定义就不再存在
执行部分:
SQL语句,过程化SQL的流程控制语句
EXCEPTION /*遇到不能继续执行的情况称为异常/
END;
二、变量和常量的定义
1.变量定义
变量名 数据类型 [[ NOT NULL]:= 初值表达式] 或者 变量名 数据类型 [[NOT NULL] 初值表达式]
2.常量定义
常量名 数据类型 CONSTANT :=常量表达式
常量必须要给一个值,并且该值在存在期间或常量的作用域内不能改变。如果试图修改它,过程
化SQL将返回一个异常
赋值语句
变量名:=表达式
3.流程控制
1.条件控制语句
1)IF 语句
IF condition THEN
Sequence_of_statements1; /*为真执行语句
ELSE
Sequence_of_statements2; /*为假或者NULL语句执行
END IF
2.嵌套控制语句
1)最简单的循环语句LOOP
LOOP
Sequence_of_statements;
END LOOP;
多数数据库服务器的过程化SQL都提供EXIT,BREAK或 LEAVE等循环语句以保证LOOP语句快能够
在适当的条件下提前执行提前结束下一个语句。
2)FOR-LOOP
FOR count IN [REVERSE] bount1...bount2 LOOP
Sequence_of_statements;
END LOOP;
FOR循环的基本执行过程:
将count设置为循环的下界bound1,检查它是否小于商界bound2.当指定REVERSE时则将count
设置为循环的上界bound2,检查count是否大于下届bound1。如果越界则执行跳出循环,否则
执行循环体,然后按照步长(+1或-1)更新count的值,重新判断条件。
3)错误处理
如果过程化SQL在执行时出现异常,则应该让程序在产生异常的语句处停下来,根据异常的类型
去执行异常处理语句。SQL标准对数据库服务器提供什么样的异常处理做出了建议,要求过程化
SQL管理器提供完善的一次处理机制。
三、存储过程和函数
过程化SQL快主要有命名块和匿名块。匿名块每次执行时都要进行编译,它不能被存储到数据库中,也不能在
其他过程化SQL块中调用。过程和函数是命名块,他们被编译后保存在数据库中,称为持久性存储模块(PSM),
可以被反复调用,运行速度较快。
1.存储过程
存储过程是由结构化SQL语句书写的过程,这个过程经编译和优化后存储在数据库服务器,因此称它为存储过程,
使用时只要调用即可。
1)由于存储过程不像解释执行的SQL语句那样在提出操作请求时才进行语法分析和优化工作,因而运行效率
高,它提供了在服务器端快速执行SQL语句的有效途径。
2)存储过程降低了客户机和服务器之间的通信量。客户机上的应用程序只要通过网络向服务器发出调用存储
过程的名字和参数,就可以让关系数据库管理系统执行其中的多条SQL语句并进行数据处理,只有最终的处理结果才返回客户端。
3)方便实施企业规则。可以把企业规则的运算程序写成存储过程放入数据库服务器中,由关系数据库管理系统管理,既有利于集中
控制,又能够方便地进行维护。当企业规则发生变化时只要修改存储过程即可,无需修改其他应用程序。
2.存储过程的用户接口
1)创建存储过程
CREATE OR REPLACE PROCEDURE 过程名([参数1,参数2,,,]) /*存储过程首部*/
AS <过程化SQL快> /*存储过程体,描述存储过程的操作*/
存储过程包括过程首部和过程体,在过程首部,“过程名”是数据库服务器合法的对象标识;
参数列表[参数1,参数2,,,]用名字来标识调用时给出的参数值,必须指定值的数据类型。
过程体是一个<过程化SQL块>,包括声明部分和可执行语句部分。
2) 执行存储过程
CALL/PERFROM PROCEDURE 过程名 ([参数1,参数2,,,])
使用CALL或者PERFORM等方式激活存储过程的执行,在过程化SQL中,数据库服务器支
持在过程体中调用其他存储过程。
3) 修改存储过程
ALTER PROCEDURE 过程名1 RENAME TO 过程名2; (重新命名一个存储过程)
ALTER PROCEDURE 过程名 COMPILEL (重新编译一个存储过程)
4) 删除存储过程
DROP PROCEDURE 过程名()
3.函数
函数必须指定返回类型
CREATE OR REPLACE FUNCTION 函数名([参数1,参数2,,,])RESEULT <类型> AS <过程化SQL块>
1)函数的执行语句格式
CALL/SELECT 函数名([参数1,参数2,,,])
2) 重命名一个自定义函数
ALTER FUNCTION 函数名1 RENAME TO 函数名2
3) 重新编译一个函数
ALTER FUNCTION 函数名 COMPILE;
三、过程化SQL中的游标
游标的概念:游标是SQL的一个内存工作区,由系统或用户以变量的形式定义。游标的作用就是用于临时存
储从数据库中提取的数据块。在某些情况下,需要把数据从存放在磁盘的表中调到计算机内存中进行处理,
最后将处理结果显示出来或最终写回数据库。这样数据处理的速度才会提高,否则频繁的磁盘数据交换会降低效率。

浙公网安备 33010602011771号