mysql存储过程-阿里云开发者社区

开发者社区> kuoren> 正文

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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
mysql存储过程是什么
在mysql中,存储过程是一组为了完成特定功能的SQL语句集合。一个存储过程是一个可编程的函数,它在数据库中创建并保存,一般由SQL语句和一些特殊的控制结构组成。使用存储过程不仅可以提高数据库的访问效率,同时也可以提高数据库使用的安全性。
17 0
mysql 存储过程2
引用:http://www.blogjava.net/sxyx2008/archive/2009/11/24/303497.html MySQL存储过程 1.1         CREATE  PROCEDURE  (创建) CREATE PROCEDURE存储过程名 (参数列表)    BEGIN          SQL语句代码块 END 注意: 由括号包围的参数列必须总是存在。
838 0
存储过程遍历
达梦数据库存储过程
41 0
+关注
kuoren
五年互联网金融开发经验;知名互联网P2P平台核心交易自动化开发;常用开发语言Java、C#、Python;熟练Linux命令使用
30
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载