Mysql的存储过程、视图、函数、事件任务

原创
2017/05/11 14:46
阅读数 176
-- 建表语句
CREATE TABLE HR_MainIndexs(
	ID BIGINT NOT NULL,
	CompanyCode INT NULL,
	SecuCode VARCHAR(10) NULL,
	EndDate DATETIME NOT NULL
);
CREATE UNIQUE INDEX IX_HR_MainIndexs ON HR_MainIndexs(
	CompanyCode ASC,
	SecuCode  ASC,
	EndDate DESC
);


-- 视图
CREATE VIEW VE_HR_ipos AS 
SELECT * from HR_MainIndexs


-- 函数方法
CREATE FUNCTION fun_descs(tag INT,strs VARCHAR(255)) 
RETURNS varchar(255) 

BEGIN
DECLARE vals varchar(255); 

-- tag=1 性别字典 1-男,2-女
IF tag=1 THEN
   IF strs='1' THEN
	SET vals='男';
   END IF;
   IF strs='2' THEN
	SET vals='女';
   END IF;
END IF;

RETURN vals;
END 


-- 存储过程
create procedure pro_mainindexs()
BEGIN

DECLARE compCode INT;
DECLARE SecuCode VARCHAR(10);

DECLARE done INT DEFAULT FALSE; -- 游标循环变量,默认false  

-- 游标查询的sql中必须用别名,使用的字段都需要用别名点出来,否则会查不到数据(恶心的问题)。
DECLARE cursors CURSOR FOR ( SELECT s.companyCode,s.SecuCode from SecuMain s where (s.SecuCode='002230' or s.SecuCode='600036') and (s.SecuMarket=83 or s.SecuMarket=90) ); 
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=TRUE; -- 游标循环结束自动转true
  
OPEN cursors;  
  myLoop: LOOP 
    FETCH cursors into compCode, SecuCode;
    -- INSERT INTO hr_logs(tags,logs,idate) VALUES('1',SecuCode,NOW());
    IF done THEN
      LEAVE myLoop;  
    END IF;  
 
    INSERT IGNORE INTO hr_mainindexs(...)  SELECT * from (...) s;
  
    COMMIT; 
  END LOOP myLoop;
CLOSE cursors; 

END




-- 定时任务job(从这天起,每一天执行一次)
CREATE EVENT et_mainindexs 
ON SCHEDULE EVERY 1 DAY STARTS '2017-05-11 01:00:00' ON COMPLETION PRESERVE ENABLE 
DO
call pro_mainindexs();


 

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部