GROUPEMP_EXISTS:

CREATE DEFINER=`ucheck`@`%` PROCEDURE `GROUPEMP_EXISTS`(IN `projectype` varchar(50), IN `groupid` int(11), IN `empid` int(11))
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
DECLARE projectid VARCHAR(10) DEFAULT NULL;
DECLARE result VARCHAR(200) DEFAULT '';
DECLARE project CURSOR FOR SELECT project_id FROM u_project WHERE u_project.project_type=projectype;
DECLARE CONTINUE HANDLER FOR SQLSTATE '' SET projectid=NULL;
OPEN project;
search_Loop:LOOP
FETCH project INTO projectid;
IF projectid IS NOT NULL THEN
SET @num = 0;
SET @sqlstr = CONCAT("SELECT COUNT(*) into @num FROM project_",projectid,".u_project_group_emp WHERE group_id=",groupid," AND emp_id=",empid);
PREPARE stmt FROM @sqlstr;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
IF @num!=0 THEN
IF result=''
THEN
SET result =projectid;
ELSE
SET result=CONCAT(result,',',projectid);
END IF;
END IF;
ELSE
LEAVE search_loop;
END IF;
END LOOP search_loop;
CLOSE project;
SELECT result;
END
GROUP_EXISTS:

CREATE DEFINER=`ucheck`@`%` PROCEDURE `GROUP_EXISTS`(IN `projectype` varchar(50), IN `groupid` int(11))
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT '根据指定的组id,查询所有库,返回存在该组id的项目id (1,2,3,4)'
BEGIN
DECLARE projectid VARCHAR(10) DEFAULT NULL;
DECLARE result VARCHAR(200) DEFAULT ''; DECLARE project CURSOR FOR SELECT project_id FROM u_project WHERE u_project.project_type=projectype;
DECLARE CONTINUE HANDLER FOR SQLSTATE '' SET projectid=NULL;
OPEN project;
REPEAT
FETCH project INTO projectid;
IF projectid IS NOT NULL
THEN
SET @num = 0;
SET @sqlstr = CONCAT("SELECT COUNT(*) into @num FROM project_",projectid,".u_project_group_emp WHERE group_id=",groupid);
PREPARE stmt FROM @sqlstr;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
IF @num!=0 THEN
IF result=''
THEN
SET result =projectid;
ELSE
SET result=CONCAT(result,',',projectid);
END IF;
END IF;
END IF;
UNTIL projectid IS NULL END REPEAT;
CLOSE project;
SELECT result;
END
UPDATE_REVIEWOK

CREATE DEFINER=`ucheck`@`%` PROCEDURE `UPDATE_REVIEWOK`(IN `projectId` int, IN `shotId` int, OUT `result` int)
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN DECLARE EXIT HANDLER FOR SQLEXCEPTION SET result=-1;
SET result=1; SET @reel='';
SET @shot=0;
set @sql=concat("SELECT shot_lock,shot_reel INTO @shot,@reel FROM project_",projectId,".u_shot WHERE shot_id=",shotId," FOR UPDATE");
prepare stmt from @sql;
execute stmt;
deallocate prepare stmt; IF @shot=1 THEN
set @sql=concat("UPDATE project_",projectId,".u_mastershotlist_part,project_",projectId,".u_mastershotlist SET dmap_review_ok=NULL WHERE u_mastershotlist.shot_id=",shotId," AND u_mastershotlist.id=u_mastershotlist_part.mastershotlist_id");
prepare stmt from @sql;
execute stmt;
deallocate prepare stmt;
ELSE
SET @picstatus=0;
set @sql=concat("SELECT status_id INTO @picstatus FROM uPlatform.u_status WHERE status_name='Review OK' AND status_type=0");
prepare stmt from @sql;
execute stmt;
deallocate prepare stmt;
SET @reviewoknum=0;
SET @totalnum=0;
set @sql=concat("SELECT SUM(IF(picture_status=",@picstatus,",1,0))AS reviewok,COUNT(*)AS totalNum INTO @reviewoknum,@totalnum FROM reel_",projectId,"_",@reel,".u_picture WHERE picture_shot=",shotId," AND picture_lock=0");
prepare stmt from @sql;
execute stmt;
deallocate prepare stmt;
IF @totalNum=0 THEN
SET @per=NULL;
set @sql=concat("UPDATE project_",projectId,".u_mastershotlist_part,project_",projectId,".u_mastershotlist SET dmap_review_ok=NULL WHERE u_mastershotlist.shot_id=",shotId," AND u_mastershotlist.id=u_mastershotlist_part.mastershotlist_id");
ELSE
SET @per=@reviewoknum /@totalnum;
set @sql=concat("UPDATE project_",projectId,".u_mastershotlist_part,project_",projectId,".u_mastershotlist SET dmap_review_ok=",@per," WHERE u_mastershotlist.shot_id=",shotId," AND u_mastershotlist.id=u_mastershotlist_part.mastershotlist_id");
END IF;
prepare stmt from @sql;
execute stmt;
deallocate prepare stmt; END IF; END
mysql> PREPARE prod FROM "INSERT INTO examlple VALUES(?,?)";
mysql> SET @p='';
mysql> SET @q='';
mysql> EXECUTE prod USING @p,@q;
mysql> SET @name='';
mysql> EXECUTE prod USING @p,@name;
mysql> DEALLOCATE PREPARE prod; #EXECUTE stmt USING @a;这样的语句USING后面的变量也只能用set @var=value这种,declare和参数传入的变量不行。

使用 PREPARE 的几个注意点: 
A:PREPARE stmt_name FROM preparable_stmt;预定义一个语句,并将它赋给 stmt_name ,tmt_name 是不区分大小写的。
B: 即使 preparable_stmt 语句中的 ? 所代表的是一个字符串,你也不需要将 ? 用引号包含起来。 
C: 如果新的 PREPARE 语句使用了一个已存在的 stmt_name ,那么原有的将被立即释放! 即使这个新的 PREPARE 语句因为错误而不能被正确执行。
D: PREPARE stmt_name 的作用域是当前客户端连接会话可见。 
E: 要释放一个预定义语句的资源,可以使用 DEALLOCATE PREPARE 句法。 
F: EXECUTE stmt_name 句法中,如果 stmt_name 不存在,将会引发一个错误。 
G: 如果在终止客户端连接会话时,没有显式地调用 DEALLOCATE PREPARE 句法释放资源,服务器端会自己动释放它。 
H: 在预定义语句中,CREATE TABLE, DELETE, DO, INSERT, REPLACE, SELECT, SET, UPDATE, 和大部分的 SHOW 句法被支持。
I: PREPARE 语句不可以用于存储过程,自定义函数!但从 MySQL 5.0.13 开始,它可以被用于存储过程,仍不支持在函数中使用!

【MYSQL】存储过程示例的更多相关文章

  1. 创建MySQL存储过程示例

    创建MySQL存储过程是学习MySQL数据库必须要掌握的知识,下文对创建MySQL存储过程作了详细的介绍,供您参考学习. AD:2013大数据全球技术峰会课程PPT下载 下文将教您如何创建MySQL存 ...

  2. MySQL存储过程示例

    MySQL存储过程: /*自定义结束符*/ DELIMITER $$ /*如果存在同名的存储过程就删除*/ DROP PROCEDURE IF EXISTS prAddBlack$$ /*创建存储过程 ...

  3. mysql 存储过程 php版本

    <?php /** * PHP操作Mysql存储过程示例 * * @author flyer0126 * @date 2011-12-23 * */ //配置数据库连接信息 $hostname ...

  4. MySQL存储过程(更新指定字段的数据)

    mysql存储过程示例: USE 数据库名称;DROP PROCEDURE IF EXISTS 数据库名称.存储过程名称;delimiter $$CREATE PROCEDURE 数据库名称.存储过程 ...

  5. MySQL 存储过程传参数实现where id in(1,2,3,...)示例

    一个MySQL 存储过程传参数的问题想实现例如筛选条件为:where id in(1,2,3,...),下面有个不错的示例,感兴趣的朋友可以参考下   正常写法:  ,,,,...); 当在写存储过程 ...

  6. mysql存储过程和存储函数

    mysql存储过程和存储函数 存数函数代码示例: DROP PROCEDURE IF EXISTS calc_ci_day_suc_rate; delimiter // CREATE FUNCTION ...

  7. Mysql存储过程调用

    mysql存储过程实例教程 发布时间:2014-04-09编辑:JB01 这篇文章主要介绍了mysql存储过程的使用方法,mysql存储过程实例教程,有需要的朋友参考下.   1.1create  p ...

  8. Mysql存储过程查询结果赋值到变量的方法

    Mysql存储过程查询结果赋值到变量的方法   把查询结果赋值到变量,大部分情况下使用游标来完成,但是如果明确知道查询结果只有一行(例如统计记录的数量,某个字段求和等),其实可以使用set或into的 ...

  9. mysql存储过程之异常处理篇

    mysql存储过程也提供了对异常处理的功能:通过定义HANDLER来完成异常声明的实现 语法如下: DECLARE handler_type HANDLER FOR condition_value[, ...

  10. JDBC使用MySQL存储过程错误

    JDBC连接执行 MySQL 存储过程报权限错误:User does not have access to metadata required to determine stored procedur ...

随机推荐

  1. Kubernetes的核心技术概念和API对象

    Kubernetes的核心技术概念和API对象 API对象是K8s集群中的管理操作单元.K8s集群系统每支持一项新功能,引入一项新技术,一定会新引入对应的API对象,支持对该功能的管理操作.例如副本集 ...

  2. python 并发编程-- 多进程

    一 multiprocessing 模块介绍 python中的多线程无法利用多核优势,如果想要充分地使用多核CPU的资源(os.cpu_count()查看),在python中大部分情况需要使用多进程 ...

  3. 谷歌,火狐提示来自"http://xxx.com/file"的资源已被阻止,因为 MIME 类型("text/plain")不匹配(X-Content-Type-Options: nosniff),如何解决?

    在使用ueditor编辑的过程中无法上传图片,谷歌火狐浏览器提示Cross-Origin Read Blocking (CORB) blocked cross-origin response http ...

  4. tomcat配置CA证书后,https的接口url请求很慢,大概率会超时

    背景:项目需要使用websocket长连接,走nginx反向代理会断开,所以决定要直连项目 [websocket连接https需要使用wss] 项目端口: 项目名:biubiu https证书端口: ...

  5. 学习Hook的必备知识

    1.汇编 2.API 3.内存 4.进程 5.窗口 必须熟悉的汇编指令: PUSH  入栈 MOV   赋值 JMP(JNZ  JE)  跳转 CALL  调用函数 RET  返回 Cmp  比较 T ...

  6. ASP.Net用户控件的使用

    一.概述: 与WEB窗体页相同,程序员可以使用任何文本编辑器创作用户控件,或者使用代码隐藏类开发用户控件.此外,与WEB窗体页一样,用户控件可以在第一次请求时被编译并存储在服务器内存中,从而缩短以后请 ...

  7. mysql基础篇--新增

    语法 #支持单行.多行插入和子查询 insert into 表名(列名,...) values(值1,...); #单行插入 insert into 表名(列名,...) values(值1,...) ...

  8. mongodb中find $ne null 与$exists的区别

    $ne null 会把空列表也算入,即使不存在. $exists 的识别效果就比较好 1.插入样例数据 db.nullexistsdemo.insertMany( [{ "name" ...

  9. ACM-ICPC 2018 沈阳赛区现场赛 K. Let the Flames Begin (约瑟夫环问题)

    题目链接: 题意:有 n 个人围成一个圈,从 1 开始报到第 k 个人出环,问第 m 个出环的人是谁,n.m.k <= 1e18 且 min(m,k)<= 2e6. 题解:容易得出O(m) ...

  10. asp.net用sql数据库生成json字符串并显示出来

    use Shop ,) )) insert into DictBase select '包装' UNION ALL select '价格' UNION ALL select '品牌' 工厂方法模式 I ...