数据库存储过程示例(以Mysql为例)

示例:创建一个简单的存储过程

假设我们有一个名为 employees 的表,结构如下:

CREATE TABLE employees (  
    id INT AUTO_INCREMENT PRIMARY KEY,  
    name VARCHAR(100),  
    position VARCHAR(100),  
    salary DECIMAL(10, 2)  
);

我们想要创建一个存储过程,用于插入新的员工记录。

1.创建存储过程

DELIMITER //  
  
CREATE PROCEDURE AddEmployee (  
    IN emp_name VARCHAR(100),  
    IN emp_position VARCHAR(100),  
    IN emp_salary DECIMAL(10, 2)  
)  
BEGIN  
    INSERT INTO employees (name, position, salary)  
    VALUES (emp_name, emp_position, emp_salary);  
END //  
  
DELIMITER ;

DELIMITER //:更改默认的语句结束符,以便在存储过程内部可以使用 ; 而不终止整个存储过程的定义。
CREATE PROCEDURE AddEmployee:创建一个名为 AddEmployee 的存储过程。
IN emp_name VARCHAR(100), IN emp_position VARCHAR(100), IN emp_salary DECIMAL(10, 2):定义输入参数。
BEGIN ... END:存储过程的主体部分。
INSERT INTO employees (name, position, salary) VALUES (...):实际的 SQL 插入语句。
DELIMITER ;:将语句结束符改回为默认的 ;

 2.调用存储过程

CALL AddEmployee('John Doe', 'Software Engineer', 75000.00);

这将调用 AddEmployee 存储过程,并向 employees 表中插入一条新记录。

3. 验证插入

SELECT * FROM employees;

这将显示 employees 表中的所有记录,你应该能看到刚刚插入的 John Doe 记录。

示例:创建一个带有输出参数的存储过程

假设我们想要创建一个存储过程,用于获取某个员工的详细信息,并返回该员工的年薪(salary * 12)。

DELIMITER //  
  
CREATE PROCEDURE GetEmployeeInfo (  
    IN emp_id INT,  
    OUT emp_name VARCHAR(100),  
    OUT emp_position VARCHAR(100),  
    OUT emp_annual_salary DECIMAL(12, 2)  
)  
BEGIN  
    SELECT name, position, salary  
    INTO emp_name, emp_position, @temp_salary  
    FROM employees  
    WHERE id = emp_id;  
  
    SET emp_annual_salary = @temp_salary * 12;  
END //  
  
DELIMITER ;

OUT emp_name VARCHAR(100), OUT emp_position VARCHAR(100), OUT emp_annual_salary DECIMAL(12, 2):定义输出参数。
使用一个用户变量 @temp_salary 来临时存储查询结果中的 salary 值,然后计算年薪。 

4. 调用带有输出参数的存储过程 

SET @emp_name = '';  
SET @emp_position = '';  
SET @emp_annual_salary = 0;  
  
CALL GetEmployeeInfo(1, @emp_name, @emp_position, @emp_annual_salary);  
  
SELECT @emp_name AS name, @emp_position AS position, @emp_annual_salary AS annual_salary;

使用 SET 语句初始化输出参数。
调用 GetEmployeeInfo 存储过程。
使用 SELECT 语句显示输出参数的值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值