PSM 的全称是 Persistent Stored Modules,即 持久化存储模块。 [1, 5]
PSM 编程是一种在数据库系统中存储和执行程序代码的方式 [5]。它允许我们将包含逻辑判断、循环、变量等传统编程语句与 SQL 语句混合编写的程序,作为数据库模式的一部分进行存储 [5]。
通过 PSM 编程,我们可以在数据库服务器端直接执行复杂的业务逻辑,而不仅仅是简单的 SQL 查询或修改。教材中介绍了 PSM 的一些核心概念和语法:
- 存储过程 (Stored Procedures) 和函数 (Functions):PSM 代码可以被组织成存储过程(使用
CREATE PROCEDURE
)或函数(使用CREATE FUNCTION
),并存储在数据库中 [8]。 - 参数:存储过程或函数可以接受参数,参数有不同的模式,如输入参数 (
IN
)、输出参数 (OUT
) 或输入输出参数 (INOUT
) [9]。 - 程序体:程序体包含具体的逻辑和 SQL 语句,可以使用
BEGIN...END
块来组织语句 [13]。 - 变量和赋值:可以声明局部变量 (
DECLARE
) 并进行赋值 (SET
) [14]。 - 控制流语句:支持条件判断(
IF...THEN...ELSEIF...END IF
)和各种循环结构(LOOP...END LOOP
,WHILE...DO...END WHILE
,REPEAT...UNTIL...END REPEAT
),以及跳出循环的LEAVE
语句 [15, 18, 20]。 - SQL 语句的执行:
- 对于返回单个值或单个元组的查询,可以直接用于变量赋值或使用
SELECT...INTO
语句获取结果 [25, 27]。 - 对于返回多个元组的查询,需要使用 游标 (Cursor) 来逐行处理结果集。这包括声明游标 (
DECLARE c CURSOR
), 打开游标 (OPEN c
), 提取数据 (FETCH FROM c INTO
), 以及关闭游标 (CLOSE c
) [28-30]。 - 在处理游标循环时,通常会检查
SQLSTATE
状态变量(或声明CONDITION
)来判断是否已读取完所有数据 [32-34]。
- 对于返回单个值或单个元组的查询,可以直接用于变量赋值或使用
- 调用:存储过程可以使用
CALL
语句来调用 [12]。
总的来说,PSM 编程为数据库提供了更强大的服务器端处理能力,可以将一些原本需要在应用程序中处理的逻辑直接放在数据库中执行。