mysql存储过程条件判断
mysql> DELIMITER //
mysql> CREATE PROCEDURE TestIfElse
-> (
-> p_val INT
-> )
-> BEGIN
-> IF (p_val = 1) THEN
-> SELECT '1' AS A;
-> ELSEIF (p_val = 2) THEN
-> SELECT '2' AS A;
-> ELSE
-> SELECT 'other' AS A;
-> END IF;
-> END//
Query OK, 0 rows affected (0.05 sec)
上面是一个最简单的 mysql 的
IF / ELSEIF 的例子了...
Ⅱ Mysql 存储过程中如何判断Cursor中结果集是否为空
0 通过定义一个上下文管理者(即declare continue handler)来实现
必须在游标定义后定义,并通过使用一个辅助变量来进行判断。
1 示例如下:
delimiter $
drop procere if exists curdemo $
CREATE PROCEDURE curdemo(pid int)
BEGIN
DECLARE notfound INT DEFAULT 0; #定义一个辅助变量用于判断
DECLARE a int; #定义游标输出值赋予的变量
DECLARE cur1 CURSOR FOR SELECT id FROM test.t where id= pid; #定义游标
DECLARE CONTINUE HANDLER FOR NOT FOUND SET notfound = 1; #定义declare continue handler,这个会根据上下文是否有结果判断是否执行SET notfound = 1
OPEN cur1;
FETCH cur1 INTO a;
if notfound = 1 then
select 'no result';
#写业务逻辑
ELSE
select concat('result:', a);
#写业务逻辑
end if;
CLOSE cur1;
END
$
delimiter ;
call curdemo(240);
Ⅲ mysql中要新建一个存储过程,,if语句的判断条件
BEGIN
IFEXISTS(select1fromrw_yzs_Staticwherepagetype=i_pagetypeandcatalogCode=i_catalogCodeandserviceCode=i_serviceCodeandserviceName=i_serviceName)THEN
updaterw_yzs_StaticsetserviceCode=i_serviceCode,serviceName=i_serviceName,zgbb=i_zgbb,sxmc=i_sxmc,cnqx=i_cnqx,sfbz=i_sfbz,dz=i_dz,bldx=i_bldx,bltj=i_bltj,sxcl=i_sxcl,ckbllc=i_ckbllc,wsbllc=i_wsbllc,blsx=i_blsx,blyj=i_blyj,bz=i_bz,updatetime=NOW()
wherepagetype=i_pagetypeandcatalogCode=i_catalogCodeandserviceCode=i_serviceCodeandserviceName=i_serviceName;
ELSE
INSERTINTOrw_yzs_Static(pagetype,divisioncode,divisionname,catalogCode,catalogName,serviceCode,serviceName,orgGroup,zgbb,sxmc,cnqx,sfbz,dz,bldx,bltj,sxcl,ckbllc,wsbllc,blsx,blyj,bz,updatetime)
VALUES(i_pagetype,i_divisioncode,i_divisionname,i_catalogCode,i_catalogName,i_serviceCode,i_serviceName,i_orgGroup,i_zgbb,i_sxmc,i_cnqx,i_sfbz,i_dz,i_bldx,i_bltj,i_sxcl,i_ckbllc,i_wsbllc,i_blsx,i_blyj,i_bz,now());
ENDIF;
END
例子与回答无关:
这里应该用case when then 这类的吧
这里给个思路,具体用法还是自己去网络吧。应该太多了这种教学。
select case 学分 when <60 then xf=0 from xscj where 学号=xh and 课程名称 =kcmc
你里你应该新增一个变量来记录成绩的值 才能对此进行IF判断
Ⅳ mysql 存储过程中的 if exists 判断问题
SELECT没有IF EXISTS 语法,你可以用select count(*) from information_schema.tables where table_schema='your_schema' and table_name='your_tab';看返回0还是1来判断。
Ⅳ mysql存储过程游标done条件
MySQL 存储过程中,使用游标查询,返回的是结果集时,如何查看调用存储过程输出结果呢?
解决方案:存储过程不返回数据,但它能创建和填充另一个表。所以在存储过程运行中创建临时表。该临时表将保存存储过程中生成的结果集,在遍历游标时,用insert保存每条数据到临时表中。后续调用时可以用select语句查询临时表中的存储过程运行结果。
以下有 三种方式 使用游标创建一个存储过程,统计某一部门下的员工信息
方法一:Loop循环
调用存储过程:
方法二:While 循环
调用存储过程:
方法三:REPEAT 循环
调用存储过程:
上述三种实现方法在测试过程中遇到下述问题。
调用存储过程查询临时表输出结果时,会发现多循环了一次,像这样:
解决方法:
在遍历游标查询结果时,先判断游标的结束标志(done) 是否是为1,如果不是1,则向临时表中插入数据。
Ⅵ mysql 存储过程怎样实现根据判断当前时间是否属于某个时间段修改数据库字段值
#创建存储过程
drop procere if exists test;
create procere test()
BEGIN
create table tmp1(startdate datetime,enddate datetime);
insert into tmp1 select startdate,enddate from d where startdate<=curdate() and enddate>=curdate();
update d set state=1 where startdate in(select startdate from tmp1) and enddate in(select enddate from tmp1);
update d set state=2 where startdate not in(select startdate from tmp1) and enddate not in(select enddate from tmp1);
drop table tmp1;
end;
#调用存储过程
call test();
思路:
创建一张表,先将当前时间与表内时间对比,如果当前时间在哪一行数据的开始时间范围和结束时间范围内则将数据插入tmp1表,进行update,将开始时间和结束时间都等于tmp1表内的startdate和enddate时改变该行state=1,不等于则改变该行state=2,删除使用过的tmp1表,结束。
注意:由于没有一个主键值,这里采用where startdate not in(select startdate from tmp1) and enddate not in(select enddate from tmp1)以及 where startdate in(select startdate from tmp1) and enddate in(select enddate from tmp1)并不是很好的选择。
Ⅶ mysql存储过程的if判断有多个条件该怎么优化效率
这个应该不会太慢吧,我建议你看一下,你是不是循环做了太多次的插入/更新操作。
mysql默认的配置中,每次事务提交都要写binlog和redo log,如果循环太多次——比如循环插入10w条记录——就会非常慢。一般优化思路分两种:
1 修改 sync_binlog为一个100-1000间的值,让binlog每隔100-1000个事务后再写一次;修改innodb_flush_log_at_trx_commit =2; 这么搞的好处是降低了写log的次数和消耗的时间,缺点是,中间出错的话,会丢失一部分的binlog和redolog导致无法通过他们来在出问题是恢复生产库数据。
2 将所有的插入/更新操作放到一个事务中进行。这样,显然就只需要一次写binlong和redolog咯。
Ⅷ mysql 存储过程中if控制语句的条件判断问题
if (@num1 < @time)
AND (@num2 < @time)
AND (@num3 < @time)
then