zoukankan      html  css  js  c++  java
  • mysql 存储过程 动态sql例子

    proc:BEGIN
        DECLARE _count INT DEFAULt 0;
        DECLARE _eventID INT DEFAULT 0;
        DECLARE _status INT DEFAULT 0;
        DECLARE _startTime VARCHAR(19) DEFAULT '';
        DECLARE _endTime VARCHAR(19) DEFAULT '';
        DECLARE _tblAccessLog VARCHAR(30) DEFAULT '';#插入日志的表,一个活动一张表
    
        
        #将局部变量转换成会话变量
        #动态sql语言只接受会话变量
        SET @iFieldID=iFieldID;
        SET @sUID=sUID;
        SET @sIP=sIP;
        SET @sCreateTime=sCreateTime;
    
    
        #判断字段状态
        SELECT event_id,`status` INTO _eventID,_status
        FROM portal_tongji_event_field
        WHERE id=iFieldID;
    
        IF _eventID=0 THEN
            SELECT -10001 AS retCode,'该字段不存在' AS retMsg;
            LEAVE proc;
        END IF;
        IF _status=2 THEN
            SELECT -10002 AS retCode,'该字段已禁用' AS retMsg;
            LEAVE proc;
        END IF;
    
    
        #判断活动状态
        SELECT COUNT(*),`status`,start_time,end_time INTO _count,_status,_startTime,_endTime
        FROM portal_tongji_event_info
        WHERE id=_eventID;
    
        IF _count=0 THEN
            SELECT -10003 AS retCode,'该活动不存在' AS retMsg;
            LEAVE proc;
        END IF;
        IF _status=2 THEN
            SELECT -10004 AS retCode,'该活动已禁用' AS retMsg;
            LEAVE proc;
        END IF;
        IF _startTime>CURDATE() THEN
            SELECT -10005 AS retCode,'活动未开始' AS retMsg;
            LEAVE proc;
        END IF;
        IF _endTime<CURDATE() THEN
            SELECT -10006 AS retCode,'活动已结束' AS retMsg;
            LEAVE proc;
        END IF;
    
    
        #判断日志表是否存在
        SET _tblAccessLog=CONCAT('portal_tongji_access_log_',_eventID);
    
        SELECT COUNT(*) INTO _count 
        FROM information_schema.TABLES 
        WHERE table_name =_tblAccessLog;
        
        IF _count=0 THEN
            SET @strSql=CONCAT('CREATE TABLE ',_tblAccessLog,' (`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,`field_id` smallint(5) unsigned NOT NULL COMMENT '统计字段ID',`uid` varchar(24) NOT NULL COMMENT '用户账号',`ip` varchar(15) NOT NULL COMMENT '用户IP',`create_time` datetime NOT NULL COMMENT '创建时间',PRIMARY KEY (`id`),KEY `field_id` (`field_id`)) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=gbk;');
            PREPARE stmt FROM @strSql;
            EXECUTE stmt;
            DEALLOCATE PREPARE stmt;
        END IF;
        
    
        #插入日志
        SET @strSql=CONCAT('INSERT ',_tblAccessLog,' VALUES(NULL,?,?,?,?);');
        PREPARE stmt FROM @strSql;
        EXECUTE stmt USING @iFieldID,@sUID,@sIP,@sCreateTime;
        DEALLOCATE PREPARE stmt;
    
    
        IF last_insert_id()>0 THEN
            SELECT 10000 AS retCode,'操作成功' AS retMsg;
        ELSE
            SELECT -10005 AS retCode,'插入失败' AS retMsg;
        END IF;
    END

    #输入参数:  IN iFieldID tinyint(3),IN sUID varchar(24),IN sIP varchar(15),IN sCreateTime varchar(19)

  • 相关阅读:
    DotText源码阅读
    看来这世界看得太清楚了也未必是种好事呢~~~~~~~
    在Init之前究竟执行了什么?
    孙子兵法
    Excel区域重命名
    Getbuffer ReleaseBuffer Cstring
    批量删除svn标志
    VB制作网页自动填表(强烈推荐)
    GetModuleFileName
    ansi编码
  • 原文地址:https://www.cnblogs.com/bossikill/p/3723794.html
Copyright © 2011-2022 走看看