mysql存储过程

简介: 此存储过程实例,主要注意 在存储过程中 if 语句的使用,已经如果存在则不添加 not exists的使用, insert into table_name(column1) select column1 from table_name2 where colunm2=’condition1’ and not exists (select 1 from table_na
+关注继续查看

此存储过程实例,主要注意 在存储过程中 if 语句的使用,已经如果存在则不添加 not exists的使用,
insert into table_name(column1) select column1 from table_name2
where colunm2=’condition1’
and not exists (select 1 from table_name2 where table_name2.column1=table_name.column1)

DELIMITER $$

CREATE PROCEDURE `sp_create_empty_account`(
    p_cellphone varchar(20),        
    p_channel_code varchar(50),     
    out p_return varchar(100)           
)
BEGIN
    declare v_user_id ,v_account_id,v_channel_id,v_channel_account_id bigint ;
    declare v_is_main_channel bit;


    DECLARE exit HANDLER FOR SQLEXCEPTION
    begin 
        ROLLBACK;
        set p_return='fail'; 
    end;


    set p_return="";

    select c_channel_id,c_is_default into v_channel_id,v_is_main_channel from t_channel 
    where c_code=p_channel_code
    and c_type=0 and c_status=1; 


    if (v_channel_id>0 && exists (select 1 from t_user where c_cellphone =p_cellphone))
    then

        select c_user_id into v_user_id
        from t_user where c_cellphone=p_cellphone;

        ** set autocommit=0; **

        start transaction;


        INSERT INTO  t_account(`c_user_id`) select v_user_id 
        from dual
        where not exists (select 1 from t_account where c_user_id=v_user_id);

        select c_account_id into v_account_id from t_account where c_user_id=v_user_id;

        if (v_account_id>0 && not exists (select 1 from t_channel_account 
                where c_account_id=v_account_id and c_channel_id=v_channel_id))
        then

            insert into t_channel_account (c_account_id,c_channel_id,c_is_active)
            values(v_account_id,v_channel_id,v_is_main_channel);


            if v_is_main_channel=b'1'
            then
                select c_channel_account_id into v_channel_account_id
                from t_channel_account 
                where c_account_id=v_account_id and c_is_active=b'1';

                update t_account set c_channel_account_id=v_channel_account_id
                where c_account_id=v_account_id;

            end if;

        end if;

        commit;

        set p_return="success";
    else
        set p_return="not found user or channel";
    end if;
END
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
4天前
|
存储 SQL 关系型数据库
MySQL连接查询与存储过程
MySQL连接查询与存储过程
10 0
|
11天前
|
存储 SQL 关系型数据库
认识MySQL的存储过程
认识MySQL的存储过程。
20 4
|
12天前
|
存储 SQL 关系型数据库
认识MySQL的存储过程
认识MySQL的存储过程。
39 2
|
20天前
|
存储 SQL 关系型数据库
MySQL存储过程和触发器
MySQL存储过程和触发器
12 0
|
23天前
|
存储 SQL 关系型数据库
MySQL存储过程与函数精讲
MySQL从5.0版本开始支持存储过程和函数。存储过程和函数能够将复杂的SQL逻辑封装在一起,应用程序无须关注存储过程和函数内部复杂的SQL逻辑,而只需要简单地调用存储过程和函数即可。
17 0
|
26天前
|
存储 关系型数据库 MySQL
MySQL的临时表以及视图与存储过程、触发器等功能概念详细解释说明以及它们的使用方法举例?
MySQL的临时表以及视图与存储过程、触发器等功能概念详细解释说明以及它们的使用方法举例?
|
2月前
|
存储 关系型数据库 MySQL
MySQL存储过程中双层游标嵌套循环实例
MySQL存储过程中双层游标嵌套循环实例
|
2月前
|
存储 SQL 关系型数据库
MySQL存储过程与触发器:提升数据库操作效率与数据一致性
本文深入探讨了MySQL数据库中的存储过程与触发器,通过丰富的代码示例,详细介绍了存储过程的定义与调用、参数与变量的应用,以及触发器的创建、使用和实际案例。存储过程作为预定义的一组SQL语句,能够提高数据库操作的效率,实现数据逻辑和复杂计算。同时,触发器作为在特定事件触发时自动执行的SQL语句,能够保障数据一致性和逻辑完整性。通过代码实例,读者将了解如何创建、调用存储过程,如何利用参数和变量进行数据处理,以及如何创建触发器并应用于实际场景。这些技术将使读者能够在数据库管理中更高效地进行操作和保障数据的完整性,为应用程序提供可靠的数据支持。
63 0
|
2月前
|
存储 SQL 关系型数据库
【MySQL】探索MySQL存储过程的魔力,初学者的数据库编程秘笈(内含实战SQL脚本)下
【MySQL】探索MySQL存储过程的魔力,初学者的数据库编程秘笈(内含实战SQL脚本)
100 1
|
2月前
|
存储 SQL 关系型数据库
【MySQL】探索MySQL存储过程的魔力,初学者的数据库编程秘笈(内含实战SQL脚本)上
【MySQL】探索MySQL存储过程的魔力,初学者的数据库编程秘笈(内含实战SQL脚本)
34 2
推荐文章
更多