【入门版】存储过程查询数据的全流程


使用存储过程查询数据的全流程包括以下几个步骤:

  1. 创建数据库和表
  2. 插入测试数据
  3. 创建存储过程
  4. 调用存储过程
  5. 优化与注意事项

我们以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 ;

总结

  1. 创建数据库和表CREATE TABLE
  2. 插入数据INSERT INTO
  3. 创建存储过程CREATE PROCEDURE
  4. 调用存储过程CALL procedure_name
  5. 优化存储过程(添加默认值、错误处理等)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

今晚务必早点睡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值