5-7
来源:百度文库 编辑:神马文学网 时间:2024/05/14 00:29:05
概 述
SQL是一种非过程性语言,有很强的表达能力。随着基于数据库的应用逻辑日益复杂,在应用中仅仅使用顺序执行的SQL语句序列表现出很大的局限性。减少局限性的方法之一是使用SQL标准的存储过程(stored procedure)和SQL/PSM(persistent stored module,持久存储模块)技术。 5.7.1 数据库存储过程与函数
1.缘由
(1)现在数据库系统往往采用客户机/服务器计算模式,很多工作可以在客户端完成,也可以在服务器端完成。
(2)客户机/服务器系统与传统的数据库系统的一个很重要的区别是:在传统的数据库系统中只存放数据,所有的应用程序都在用户端,都与用户实际运行的应用程序捆绑在一起;而在客户机/服务器系统中,在数据库中还存放程序,由于这种程序以数据库对象的形式存储在数据库中,因此称为存储过程。
(3)存储过程是使用SQL语句和流程控制语句编写的模块,存储过程经编译和优化后存储在数据库服务器端的数据库中,使用时调用即可。
2.使用存储过程的优点
(1)提高运行速度
(2)增强了SQL的功能和灵活性
(3)可以降低网络的通信量
(4)减轻了程序编写的工作量
(5)间接实现安全控制功能
3.声明存储过程的一般形式
(1)申明存储过程
CREATE PROCEDURE <过程名> (<参数>)
<局部声明>
<过程体>;
(2)申明函数
CREATE FUNCTION <函数名> (<参数>)
RETURNS <返回类型>
<局部声明>
<函数体>;
(3)调用语句的形式
CALL <过程名> (<参数列表>); 5.7.2 SQL/PSM
1.顺序执行
(1)顺序执行是基本控制流程
(2)语句按照自然顺序连续执行
2.条件分支语句
(1)形式
IF <条件> THEN <语句列表>
ELSEIF <条件> THEN <语句列表>
……
ELSEIF <条件> THEN <语句列表>
ELSE <语句列表>
END IF;
(2)例句
CREATE FUNCTION CourseSize(IN courseno INTEGER)
RETURNS VARCHAR[7];
DECLARE NoOfStudents INTEGER;
SELECT COUNT(*) INTO NoOfStudents FROM SC WHERE CNO = courseno;
IF NoOfStudents > 100 THEN RETURN “HUGE”
ELSEIF NoOfStudents>60 THEN RETURN “LARGE”
ELSEIF NoOfStudents>20 THEN RETURN “MEDIUM”
ELSE RETURN “SMALL”
END IF;
(3)说明(针对上述程序)
3.循环语句
(1)标准的WHILE循环结构
WHILE <条件> DO
<语句列表>
END WHILE;
(2)标准的REPEAT循环结构
REPEAT
<语句列表>
UNTIL <条件>
END REPEAT;
(3)基于游标的循环结构
FOR <循环名> AS <游标名> CURSOR FOR <查询> DO
<语句列表>
END FOR;