mysql存儲過程

此存儲過程實例,主要注意 在存儲過程中 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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章