2018年7月

首页2018年7月
16
Jul
0

mysql 触发器里使用游标

--存储过程
CREATE DEFINER = 'root'@'10.200.%.%'
PROCEDURE geely-itil-pc-test.StatisticStore()
BEGIN
-- 创建接收游标数据的变量
DECLARE c int;
DECLARE n varchar(20);
-- 创建总数变量
DECLARE total int DEFAULT 0;
-- 创建结束标志变量
DECLARE done int DEFAULT FALSE;
-- 创建游标
DECLARE cur CURSOR FOR
SELECT

id

FROM message_option;
-- 指定游标循环结束时的返回值
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
-- 设置初始值
SET total = 0;
-- 打开游标
OPEN cur;
-- 开始循环游标里的数据
read_loop:
LOOP

-- 根据游标当前指向的一条数据
FETCH cur INTO c;
-- 判断游标的循环是否结束
IF done THEN
  LEAVE read_loop;    -- 跳出游标循环
END IF;
-- 获取一条数据时,将count值进行累加操作,这里可以做任意你想做的操作,
SET total = total + c;

-- 结束游标循环
END LOOP;
-- 关闭游标
CLOSE cur;

-- 输出结果
SELECT

total;

END

-- 普通执行SQL语句
DROP TRIGGER IF EXISTS group_state_update_user_logout;
delimiter ;;
CREATE TRIGGER group_state_update_user_logout AFTER UPDATE ON operation_group FOR EACH ROW BEGIN

DECLARE cid integer DEFAULT 0;
DECLARE done int DEFAULT FALSE;
DECLARE cur CURSOR FOR SELECT  user_id  FROM user_group WHERE group_id = new.id;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

IF (old.state <> new.state) then

OPEN cur;
read_loop:
LOOP
  FETCH cur INTO cid;
  IF done THEN
    LEAVE read_loop;
  END IF;
  UPDATE user_cache set last_check_time = '2017-01-01' WHERE user_id = cid;
END LOOP;
CLOSE cur;

END IF;
END
;;
delimiter ;

-- 生成SQL语句并执行 (函数和触发器暂时不支持动态语句,只能在存储过程中使用)

set exesql = CONCAT('UPDATE user_cache set last_check_time = \'2017-01-01\' WHERE user_id IN(',ids,')');
prepare stmt from @exesql;  -- 编译语句 
EXECUTE stmt; -- 执行语句 
EXECUTE prod USING ids; -- 执行语句 ids 替换?参数
DEALLOCATE prepare prod; -- 释放解析和执行sql语句
13
Jul
0

遍历文件夹文件的几种方式

import os

递归文件夹

def get_file_list_by_dir(filepath):

files = os.listdir(filepath)
filenames = []
for fi in files:
    fi_d = os.path.join(filepath, fi)
    if os.path.isdir(fi_d):
        filenames.extend(get_file_list_by_dir(fi_d))
    else:
        filenames.append(os.path.join(filepath, fi_d))
return filenames

遍历目录树

def get_file_list_by_dir02(filepath):

filenames = []
for fpathe, dirs, fs in os.walk(filepath):
    for f in fs:
        filenames.append(os.path.join(fpathe, f))
return filenames

列出当前文件夹目录列表

def get_file_list_by_dir03(filepath):

return [i for i in os.listdir(filepath) if os.path.isdir(os.path.join(filepath, i))]

列出当前文件夹文件列表

def get_file_list_by_dir04(filepath):

return [i for i in os.listdir(filepath) if
        os.path.isfile(os.path.join(filepath, i))]