taskctl实现自定义mysql存储过程作业类型调用
TASKCTL支持任意作业类型的扩展,但目前TASKCTL 4.1.3版本中并没有内置mysql存储过程的作业插件。通过介绍使TASKCTL支持调度mysql存储过程作业类型的步骤,一方面解决一些朋友迫切的mysql存储过程调度需求,另一方面抛砖引玉,让大家能够在TASKCTL中扩展更多的适应自己需求的作业插件。
1、在$TASKCTLDIR/src/plugin/mysqlproc/shell/目录中新增cprunmysqlproc.sh作业插件,实际上就是一个shell程序,代码如下:
#!/bin/sh if [ $# -ne 3 ]
then
echo "Param error !"
echo "Usage: $0 progname para expara"
exit 126
fi #------------------------------------------------------------------------------
# 第一步: 接收参数
#------------------------------------------------------------------------------
ProgName=$1
Para=`echo $2` #此处为了去前后空格,以便判断是否真正有入口参数
ExpPara=$3 #------------------------------------------------------------------------------
# 第二步: 解析exppara,分别获取数据库HOST,数据库名称、用户、密码等信息
#------------------------------------------------------------------------------ # 数据库名 并去前后空格
tmpstr=`echo ${ExpPara}|awk -F ',' '{print $1}'`
DBHOST=`echo ${tmpstr}` # 数据库名 并去前后空格
tmpstr=`echo ${ExpPara}|awk -F ',' '{print $2}'`
DBNAME=`echo ${tmpstr}` # 数据库用户 并去前后空格
tmpstr=`echo ${ExpPara}|awk -F ',' '{print $3}'`
DBUSER=`echo ${tmpstr}` # 数据库密码 并去前后空格
tmpstr=`echo ${ExpPara}|awk -F ',' '{print $4}'`
DBPASSWD=`echo ${tmpstr}` #------------------------------------------------------------------------------
# 第三步: 执行存储过程
#------------------------------------------------------------------------------
sqlstr=`mysql -h${DBHOST} -u${DBUSER} -p${DBPASSWD} <<EOF 2>&1
call ${DBNAME}.${ProgName}('${Para}',@retcode,@retmsg);
select '\r';
select @retcode;
select @retmsg;
quit
EOF` #------------------------------------------------------------------------------
# 第四步: 插件返回
#------------------------------------------------------------------------------ echo "================================================================================" result=`echo $sqlstr |awk '{print $3,$5}'`
out=`echo $result |awk '{print $1}'`
CMSG=`echo $result |awk '{print $2}'`
echo ${CMSG}
echo ""
if [ $out -eq 0 ]
then
exit 0
else
exit 1
fi
2、在桌面软件admin中进入"任务类型"功能中,设置mysqlproc作业类型,如下图所示:

3、在桌面软件designer中设计mysqlproc作业如下代码片段:
<!-- 按照插件程序的要求,para属性中设置一个输入参数,exppara属性中设置 主机名,数据库名,用户名,用户密码,用逗号隔开-->
<mysqlproc>
<name>MainModul_JobNode0</name>
<progname>proc_taskctl</progname>
<para>$(mysql_in_param1)</para>
<exppara>$(mysqlhost),$(mysqldbname),$(mysqluser),$(mysqlpwd)</exppara>
</mysqlproc>
4、附mysql存储过程程序 proc_taskctl 示例代码:
CREATE PROCEDURE `proc_taskctl`(IN msg VARCHAR(20),OUT retcode int,OUT retmsg varchar(255))
BEGIN
SET retmsg = concat('hello:',msg);
SET retcode = 0;
END
5、至此就可以调用mysql存储过程了。
taskctl实现自定义mysql存储过程作业类型调用的更多相关文章
- MySQL存储过程_创建-调用
阅读目录:MySQL存储过程_创建-调用-参数 存储过程:SQL中的"脚本" 创建存储过程 调用存储过程 存储过程体 语句块标签 存储过程的参数 in:向过程里传参 out:过程向 ...
- mysql存储过程且mybatis调用
首先,需要执行符DELIMITER ,建议用//,即在存储过程开始前定义delimiter //,在结束后加上//,最后加上DELIMITER ; 具体原因@参考文章1写的很清楚,不再赘述. 参考文章 ...
- mysql 存储过程--- 创建,调用,删除
DELIMITER //CREATE PROCEDURE p_addscore(nums INT,OUT retrows INT)BEGINDECLARE i INT DEFAULT 0;add_lo ...
- MySQL存储过程的创建及调用
阅读目录:MySQL存储过程_创建-调用-参数 存储过程:SQL中的“脚本” 1.创建存储过程 2.调用存储过程 3.存储过程体 4.语句块标签 存储过程的参数 1.in:向过程里传参 2.out:过 ...
- Mysql存储过程调用
mysql存储过程实例教程 发布时间:2014-04-09编辑:JB01 这篇文章主要介绍了mysql存储过程的使用方法,mysql存储过程实例教程,有需要的朋友参考下. 1.1create p ...
- MySQL存储过程(一)
1.1 CREATE PROCEDURE (创建) CREATE PROCEDURE存储过程名 (参数列表) BEGIN SQL语句代码块 END 注意: 由括号包围的参数列必须总是存在.如果没有参 ...
- MySQL存储过程(转载)
转自:http://www.blogjava.net/sxyx2008/archive/2009/11/24/303497.html 1.1 CREATE PROCEDURE (创 ...
- MySQL存储过程和自定义函数、Navicat for mysql、创建存储过程和函数、调用存储过程和函数的区别
1 MySQL存储过程和函数 过程和函数,它们被编译后保存在数据库中,称为持久性存储模块(Persistent Stored Module,PSM),可以反复调用,运行速度快. 1.1 存储过程 存储 ...
- 基本开题的感觉是了-MySQL继续继续(自定义函数&存储过程)
hi 感觉论文开题基本确定了,凯森 1.MySQL -----自定义函数----- ----基本 两个必要条件:参数和返回值(两者没有必然联系,参数不一定有,返回一定有) 函数体:合法的SQL语句:以 ...
随机推荐
- ES 2015/6 新特性汇总
ES 2015/6 新特性汇总 箭头函数 箭头函数,通过 => 语法实现的函数简写形式,C#/JAVA8/CoffeeScript 中都有类似语法.与函数不同,箭头函数与其执行下文环境共享同一个 ...
- [1] 插件架构(PLUG-IN)
网上的一种比较好对插件的定义是:插件(Plug-in,又称addin.add-in.addon或add-on,又译外挂)也称为扩展,是一种遵循一定规范的应用程序接口编写出来的程序,主要是用来扩展软件功 ...
- CNN压缩:为反向传播添加mask(caffe代码修改)
神经网络压缩的研究近三年十分热门,笔者查阅到相关的两篇博客,博主们非常奉献的提供了源代码,但是发发现在使用gpu训练添加mask的网络上,稍微有些不顺,特此再进行详细说明. 此文是在 基于Caffe的 ...
- grid栅格布局
前面的话 Grid布局方式借鉴了平面装帧设计中的格线系统,将格线运用在屏幕上,而不再是单一的静态页面,可以称之为真正的栅格.本文将详细介绍grid布局 引入 对于Web开发者来说,网页布局一直是个比较 ...
- Python爬虫从入门到放弃(十)之 关于深度优先和广度优先
网站的树结构 深度优先算法和实现 广度优先算法和实现 网站的树结构 通过伯乐在线网站为例子: 并且我们通过访问伯乐在线也是可以发现,我们从任何一个子页面其实都是可以返回到首页,所以当我们爬取页面的数据 ...
- phpstrom识别phalcon框架模板文件的配置
- Java中使用 Long 表示枚举类
Java中使用 Long 表示枚举类 在日常的开发过程中,很多时候我们需要枚举类(enum)来表示对象的各种状态,并且每个状态往往会关联到指定的数字,如: private enum Color { R ...
- 【Android Developers Training】 14. 序言:管理Activity生命周期
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- 处理浏览器兼容 各个浏览器的标识 hack
Firefox 浏览器 @-moz-document url-prefix() { .selector { property: value; } } 支持所有Gecko内核的浏览器 (包括Firefo ...
- Linux用户管理-中
添加用户组命令groupadd 提示:groupadd命令的使用非常简单,但在生产环境中使用的不多,因此,会简单应用即可. 与groupadd命令有关的文件有:/etc/group :用户组相关文件/ ...