使用存储过程查询数据的全流程包括以下几个步骤:
- 创建数据库和表
- 插入测试数据
- 创建存储过程
- 调用存储过程
- 优化与注意事项
我们以MySQL为例进行演示(SQL Server、PostgreSQL的语法略有不同)。
1. 创建数据库和表
首先,我们创建一个数据库 test_db
并创建 employees
表。
CREATE DATABASE IF NOT EXISTS test_db;
USE test_db;
CREATE TABLE employees (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
department VARCHAR(50),
salary DECIMAL(10,2)
);
2. 插入测试数据
往 employees
表中插入一些数据。
INSERT INTO employees (name, department, salary) VALUES
('张三', '技术部', 8000.00),
('李四', '市场部', 9000.50),
('王五', '技术部', 12000.00),
('赵六', '财务部', 7500.00);
3. 创建存储过程
假设我们要查询某个部门的所有员工信息,并且工资大于某个数值,我们可以创建存储过程 GetEmployeesByDept
。
DELIMITER //
CREATE PROCEDURE GetEmployeesByDept(
IN dept_name VARCHAR(50),
IN min_salary DECIMAL(10,2)
)
BEGIN
SELECT * FROM employees
WHERE department = dept_name AND salary >= min_salary;
END //
DELIMITER ;
说明
IN dept_name VARCHAR(50)
:输入参数,表示部门名称IN min_salary DECIMAL(10,2)
:输入参数,表示最小工资SELECT * FROM employees WHERE department = dept_name AND salary >= min_salary;
:执行查询操作
4. 调用存储过程
使用 CALL
语句执行存储过程。例如,我们想查询 技术部 且工资大于 8000 的员工:
CALL GetEmployeesByDept('技术部', 8000);
返回结果:
+----+------+--------+---------+
| id | name | department | salary |
+----+------+--------+---------+
| 3 | 王五 | 技术部 | 12000.00 |
+----+------+--------+---------+
5. 优化与注意事项
(1) 删除存储过程
如果需要修改存储过程,可以先删除再重建:
DROP PROCEDURE IF EXISTS GetEmployeesByDept;
(2) 添加默认参数
如果 min_salary
可能为空,可以使用 IF
语句提供默认值:
DELIMITER //
CREATE PROCEDURE GetEmployeesByDept2(
IN dept_name VARCHAR(50),
IN min_salary DECIMAL(10,2)
)
BEGIN
IF min_salary IS NULL THEN
SET min_salary = 0;
END IF;
SELECT * FROM employees
WHERE department = dept_name AND salary >= min_salary;
END //
DELIMITER ;
总结
- 创建数据库和表 →
CREATE TABLE
- 插入数据 →
INSERT INTO
- 创建存储过程 →
CREATE PROCEDURE
- 调用存储过程 →
CALL procedure_name
- 优化存储过程(添加默认值、错误处理等)