mysql 函数和存储过程demo

使用存储过程时,需要转换结束符,这样执行不会报错,如下

mysql>DELIMITER &&

然后在写下面语句

DROP PROCEDURE IF EXISTS p_test1 &&

CREATE procedure p_test1(in parm1 int,out count_sum int)

BEGIN 

    select count(*) into count_sum from user where id> parm1;

END &&

执行完过程后,如果想要恢复原来分号结尾的执行方式,就再调用一次,如下:

mysql> DELIMITER ;

这样话调用存储存储过程就可以使用分号结尾执行了。

call p_test1(100,@test_s);


如果还是上面&&结尾的话,就还需要转换。


drop procedure if exists sp4 &&

create procedure sp4(inout p4 int)

begin

 if p4 = 4 then

        set @pg = 400;

 else

        set @pg = 500;

 end if;

 

 select @pg;

 

end&&

set @pp=4&&

call sp4(@pp)&&

------------------------------------------------------------------------------------------------

下面我换了一种结尾符来标明结束

DELIMITER $$  

DROP PROCEDURE IF EXISTS test_sp1 $$

CREATE PROCEDURE test_sp1 (out error int)

BEGIN

    DECLARE

        t_error INTEGER DEFAULT 0 ; DECLARE

            CONTINUE HANDLER FOR SQLEXCEPTION

        SET t_error = 1 ; START TRANSACTION ;

    insert into person(name,sex) values('0',10);

    insert into person(name,sex) values('0',1111);

        IF t_error = 1 THEN

            set error=t_error;

            ROLLBACK ;

        ELSE

            set error=0;

            COMMIT ;

        END

        IF ;

END $$  

DELIMITER ;

insert into person(name,sex) values('0',0);

call test_sp1(@error);

select @error;

------------------------------------------------------------------------------------------------

DELIMITER $$  

DROP FUNCTION IF EXISTS `wesource`.`getdate`$$  

CREATE FUNCTION `wesource`.`getdate`(id_1 int) RETURNS varchar(255)  

    BEGIN  

    DECLARE x VARCHAR(255) DEFAULT '';

    DECLARE gdate datetime DEFAULT NULL;   

    select ctime into gdate from messages where id= id_1;

    SET x= date_format(gdate,'%Y年%m月%d日%h时%i分%s秒');  

    RETURN x;  

    END $$  

DELIMITER ;  

select getdate(1);

------------------------------------------------------------------------------------------------

DELIMITER $$  

DROP PROCEDURE IF EXISTS test_sp1 $$

CREATE PROCEDURE `test_sp1`(in sexVla int,out error int)

BEGIN

    DECLARE

        t_error INTEGER DEFAULT 0 ; DECLARE

            CONTINUE HANDLER FOR SQLEXCEPTION

        SET t_error = 1 ; START TRANSACTION ;

    insert into person(name,sex) values('0',sexVla);

    insert into person(name,sex) values('0',sexVla+1);

        IF t_error = 1 THEN

            set error=t_error;

            ROLLBACK ;

        ELSE

            set error=0;

            COMMIT ;

        END

        IF ;

END $$  

DELIMITER

call test_sp1(20,@p);

select @p;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值