温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

sql存储过程怎么写

发布时间:2026-10-27 20:47:11 来源:亿速云 阅读:86 作者:小樊 栏目:数据库

下面我按从基础到实战给你讲清楚 SQL 存储过程(Stored Procedure)怎么写,以最常用的 MySQL 和 SQL Server 为例,其他数据库(Oracle / PostgreSQL)也类似。


一、什么是存储过程?

存储过程是一段提前编译好、保存在数据库里的 SQL 代码,可以:

  • 接收参数
  • 执行多条 SQL
  • 返回结果或状态

✅ 优点:性能好、安全、逻辑集中


二、MySQL 存储过程写法

1️⃣ 基本语法

DELIMITER $$

CREATE PROCEDURE 过程名(参数列表)
BEGIN
    -- SQL 语句
END$$

DELIMITER ;

2️⃣ 无参数存储过程

DELIMITER $$

CREATE PROCEDURE get_users()
BEGIN
    SELECT * FROM user;
END$$

DELIMITER ;

调用:

CALL get_users();

3️⃣ 带输入参数(IN)

DELIMITER $$

CREATE PROCEDURE get_user_by_id(IN uid INT)
BEGIN
    SELECT * FROM user WHERE id = uid;
END$$

DELIMITER ;

调用:

CALL get_user_by_id(1);

4️⃣ 带输出参数(OUT)

DELIMITER $$

CREATE PROCEDURE get_user_count(OUT cnt INT)
BEGIN
    SELECT COUNT(*) INTO cnt FROM user;
END$$

DELIMITER ;

调用:

CALL get_user_count(@c);
SELECT @c;

5️⃣ 输入输出(INOUT)

DELIMITER $$

CREATE PROCEDURE add_num(INOUT n INT)
BEGIN
    SET n = n + 10;
END$$

DELIMITER ;

调用:

SET @x = 5;
CALL add_num(@x);
SELECT @x;

6️⃣ 带逻辑判断

DELIMITER $$

CREATE PROCEDURE check_user(IN uid INT)
BEGIN
    IF uid > 0 THEN
        SELECT '有效用户';
    ELSE
        SELECT '无效用户';
    END IF;
END$$

DELIMITER ;

三、SQL Server 存储过程写法

1️⃣ 基本语法

CREATE PROCEDURE 过程名
    @参数 类型
AS
BEGIN
    -- SQL
END

2️⃣ 示例

CREATE PROCEDURE get_user
    @id INT
AS
BEGIN
    SELECT * FROM user WHERE id = @id
END

调用:

EXEC get_user @id = 1

四、常见错误 & 注意点

✅ 修改存储过程用 ALTER PROCEDURE
✅ 删除:DROP PROCEDURE 名
✅ MySQL 必须加 DELIMITER
✅ 不要写太复杂的业务逻辑(放应用层更好)


五、适合用存储过程的场景

  • 报表统计
  • 批量更新
  • 数据初始化
  • 权限控制

如果你愿意,可以告诉我:

  • 用的是 MySQL / SQL Server / Oracle
  • 想实现什么功能(增删改查 / 统计 / 定时任务)

我可以直接帮你写可用的存储过程代码。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手