推荐答案
在 MariaDB 中,创建存储过程的语法如下:
-- -------------------- ---- ------- --------- -- ------ --------- ----------------- ------ --------- --- ------ --------- ----- -- --------- ------ ----------- ---- ------ ---- ---------- ----- ---------- --- -- --------- -
示例
假设我们有一个名为 employees
的表,我们想创建一个存储过程来获取某个员工的薪水:
DELIMITER // CREATE PROCEDURE GetEmployeeSalary(IN emp_id INT, OUT salary DECIMAL(10,2)) BEGIN SELECT emp_salary INTO salary FROM employees WHERE id = emp_id; END // DELIMITER ;
本题详细解读
1. DELIMITER
语句
在 MariaDB 中,默认的语句结束符是分号 (;
)。为了在存储过程中使用分号而不导致语句提前结束,我们需要使用 DELIMITER
语句来临时更改结束符。通常,我们会将结束符改为 //
或其他符号,然后在存储过程定义结束后再改回分号。
2. CREATE PROCEDURE
语句
CREATE PROCEDURE
用于定义一个新的存储过程。存储过程可以包含输入参数 (IN
)、输出参数 (OUT
) 或输入输出参数 (INOUT
)。
IN
参数:用于向存储过程传递值。OUT
参数:用于从存储过程返回值。INOUT
参数:既可以传递值,也可以返回值。
3. BEGIN ... END
块
BEGIN ... END
块用于包含存储过程的主体逻辑。在这个块中,你可以编写 SQL 语句、控制流语句(如 IF
、CASE
、LOOP
等)以及其他存储过程调用。
4. 示例解析
在示例中,我们创建了一个名为 GetEmployeeSalary
的存储过程,它接受一个 emp_id
作为输入参数,并返回该员工的薪水。SELECT ... INTO
语句用于将查询结果赋值给 OUT
参数 salary
。
5. 调用存储过程
创建存储过程后,可以使用 CALL
语句来调用它:
CALL GetEmployeeSalary(1, @salary); SELECT @salary;
在这个例子中,1
是传递给 emp_id
的参数,@salary
是一个用户定义的变量,用于存储返回的薪水值。