18143453325 在线咨询 在线咨询
18143453325 在线咨询
所在位置: 首页 > 营销资讯 > 信息时代 > SQL持久存储模块(数据库)

SQL持久存储模块(数据库)

时间:2022-11-09 06:30:02 | 来源:信息时代

时间:2022-11-09 06:30:02 来源:信息时代

    SQL持久存储模块 : 定义用来声明和维护数据库持久例程的SQL语句的语法和语义的标准。在SQL系列标准中SQL持久存储模块是系列标准的第四部分,国际标准的命名是Information Technology—Database Languages—SQL—Part 4:Persistent Stored Modules,通常缩写为SQL/PSM,其标准编号为ISO/IEC 9075-4。
最早的SQL语言是高度非过程化的查询语言,然而随着数据库应用的发展,用户提出了在数据库中定义和保存完成特定功能的自定义例程的需求。在1996年,SQL持久存储模块作为SQL92标准的增补部分完成并发布,称为PSM-96。在后来的SQL99和SQL 2003中,SQL持久存储模块作为正式SQL标准的第四部分发布,并且将存储例程的定义和调用语句移到了SQL标准的第二部分: SQL/基础中。
在SQL持久存储模块中,主要定义和说明了以下内容:
1.包含多语句的过程
在SQL持久存储模块中,成组的SQL语句能够放在一起执行,并且提供流程控制语句、局部变量和状态处理语句。
用BEGIN和END包围若干条语句,能够将多条语句组成一个复合语句执行。在复合语句中还允许声明任何SQL数据类型的局部变量,这些变量和宿主语言中的变量不同,而是类似于数据库中表的某个列。在复合语句中还允许声明游标,来处理复合语句中某条查询语句的结果。另外,在复合语句中还能够定义处理错误和异常的状态处理语句。
在复合语句的基础上,实现用户自定义例程的关键,是SQL持久存储模块提供了现代编程语言中才有的流程控制语句。SQL持久存储模块中提供的流程控制语句包括条件判断语句—IF语句,条件分支语句—CASE语句,循环语句—LOOP语句、WHILE语句和REPEAT语句,以及专门用来处理查询结果的带游标循环语句—FOR语句。
例如:
PROCEDURE drop course
(IN student_id CHAR(6),
IN course_id CHAR(6),
OUT transcript_line CHAR(80))
BEGIN
DELETE FROM enrollments WHERE student=student_id
AND course=course_id;
INSERT INTO transcript
VALUES (student_id,CURRENT_DATE,
course_id‖`dropped`);
SET transcript_line=course_id‖`dropped`;
END;
FUNCTION courses(s_id)
RETURN CHAR VARING(80)
BEGIN
DECLARE S CHAR.VARYING(30)
FOR e AS SELECT*FROM enrollments
WHERE e.student=s_id
DO
IF s ``
THEN SET s=s‖`,`;
END IF;
SET s=s‖course;
END FOR;
RETURN s;
END:
2.存储例程和模块
在SQL持久存储模块中,过程、函数和模块都能够保存在SQL服务器中。
SQL持久存储模块允许定义的例程作为一个模式对象保存在数据库中,就像一个表对象一样。并给出了一系列的数据定义语句来定义和删除这些存储例程。SQL持久存储模块还允许对存储例程进行权限管理,并支持同名不同参数的多态存储例程。
在现代编程语言中作为编译单位的模块,也被引入到SQL语言中。SQL中的客户模块,用来包含一个或多个用户定义的存储例程。SQL持久存储模块也支持将模块保存在数据库中,并给出一系列数据定义语句来定义和删除模块以及进行权限管理。
3. 外部例程
在SQL持久存储模块中,用宿主语言写的函数和过程,也能够在SQL语言中被调用。
用宿主语言编写的例程,提供一个供SQL语句调用使用的头部,其中包括例程名和相关参数。该例程头部将保存在数据库中,其他SQL语句能够像调用普通SQL例程一样调用这些定义好的外部例程。

74
73
25
news

版权所有© 亿企邦 1997-2022 保留一切法律许可权利。

为了最佳展示效果,本站不支持IE9及以下版本的浏览器,建议您使用谷歌Chrome浏览器。 点击下载Chrome浏览器
关闭