1 DataInside脚本语法说明
1、关键字、函数、参数等必须为小写。比如log_into_db、execute、set_db_by_name等
2、字符串必须以””包括起来,且关键字与字符串中间必须用户括号包括起来。比如:log_into_db("查询表数据"),其中log_into_db为关键字,” 查询表数据”为字符串。
3、SQL语句必须使用关键字execute(“……”)或execute(""“……”"")包括起来。也可以接收自定义变量和日期函数
例:
int c = 1; /*自定义变量*/
execute (“select Id, Name, ‘{today()}’ DAY from User where ID=${c} “);
注:一个execute(“”)中只能执行一个SQL语句
4、每一个代码块必须以分号结束。如for循环和execute结束
例:
for (int i = 0 ; i <10; i++ )
{
log_into_db("${i}");
};
execute(" select * from user ");
5、DataInside脚本语法支持for循环。
例:
for (int i = 0 ; i <10; i++ )
{
log_into_db("${i}");
};
6、日期函数及自定义变量使用注意事项,日期函数在使用时需使用{}将日期函数包括起来,自定义变量需使用${}把变量名包含起来
例:
日期函数: today()
log_into_db("{today()}");
自定义变量
int C = 1;
log_into_db("${C}"); /*自定义变量区分大小写*/
7、当函数带有多个参数时,则每个参数间必须以英文状态的逗号隔开。
例:
主机函数
getCpu("root","root", "127.0.0.1");
8、if 判断语句
例:判断表名是否存在,不存在则创建
boolean c=table_exists("地区收入明细表");
if (!c){
execute(" CREATE TABLE 地区收入明细表
(
商品编号 varchar(255),
品类 varchar(255),
金额 bigint,
销售日期 varchar(255),
分公司 varchar(255)
)
");
};
9、注释:支持单行和多行,单行以#号注释,多行以/**/进行注释
例:
单行:#
#log_into_db("单行注释");
多行:/**/
/*for (int i = 0 ; i <10; i++ )
{ Boolean aac = log_into_db("${i}");
log_into_db("${aac}");
}; */
2 DataInside脚本函数
2.1 日期函数
now()
用途:返回当前日期时间
示例:TABLE_NAME表结构为:
A_COLUMN | B_COLUMN | TIME |
---|---|---|
DHSWA | CKDHU |
执行语句:
UPDATE TABLE_NAME SET TIME=('{now()}')
返回结果:
A_COLUMN | B_COLUMN | TIME |
---|---|---|
DHSWA | CKDHU | 2020-12-03 11:05:19 |
today()
用途:返回当前日期
示例:TABLE_NAME表结构为:
A_COLUMN | B_COLUMN | TODAY |
---|---|---|
DHSWA | CKDHU |
执行语句:
UPDATE TABLE_NAME SET TODAY=('{today()}')
返回结果:
A_COLUMN | B_COLUMN | TODAY |
---|---|---|
DHSWA | CKDHU | 2020-10-28 |
yyyymmdd()
用途:返回日期年月日,数值前面补0,可在括号里加减偏移日期。
示例:当前日期为20201026,TABLE_NAME表结构为:
YMD1 | YMD2 | YMD3 |
---|---|---|
执行语句:
INSERT INTO TABLE_NAME(YMD1,YMD2,YMD3) VALUES ('{yyyymmdd()}', '{yyyymmdd(2)}', '{yyyymmdd(-2)}')
返回结果:
YMD1 | YMD2 | YMD3 |
---|---|---|
20201026 | 20201028 | 20201024 |
yyyy-mm-dd()
用途:返回日期年月日,数值前面补0,可在括号里加减偏移日期。
示例:当前日期为2020-10-26,TABLE_NAME表结构为:
YMD1 | YMD2 | YMD3 |
---|---|---|
执行语句:
INSERT INTO TABLE_NAME(YMD1,YMD2,YMD3) VALUES ('{yyyy_mm_dd()}', '{yyyy_mm_dd(2)}', '{yyyy_mm_dd(-2)}')
返回结果:
YMD1 | YMD2 | YMD3 |
---|---|---|
2020-10-26 | 2020-10-28 | 2020-10-24 |
dd()
用途:返回两位数日期号数,数值前面补0,可在括号里加减偏移号数
示例:当前日期为20201201,TABLE_NAME表结构为:
DD1 | DD2 | DD3 |
---|---|---|
执行语句:
INSERT INTO TABLE_NAME(DD1,DD2,DD3) VALUES ('{dd()}', '{dd(2)}', '{dd(-2)}')
返回结果:
DD1 | DD2 | DD3 |
---|---|---|
01 | 03 | 29 |
day()
用途:返回日期号数,数值前面不补0,可在括号里加减偏移号数
示例:当前日期为20201201,TABLE_NAME表结构为:
DD1 | DD2 | DD3 |
---|---|---|
执行语句:
INSERT INTO TABLE_NAME(DD1,DD2,DD3) VALUES ('{day()}', '{day(2)}', '{day(-2)}')
返回结果:
DD1 | DD2 | DD3 |
---|---|---|
1 | 3 | 29 |
mmdd()
用途:返回日期月日,数值前面补0,可在括号里加减偏移日期。
示例:当前日期为20201201,TABLE_NAME表结构为:
MMDD1 | MMDD2 | MMDD3 |
---|---|---|
执行语句:
INSERT INTO TABLE_NAME(YMD1,YMD2,YMD3) VALUES ('{mmdd()}', '{mmdd(2)}', '{mmdd(-2)}')
返回结果:
MMDD1 | MMDD2 | MMDD3 |
---|---|---|
1201 | 1203 | 1129 |
mm_dd()
用途:返回日期月日,数值前面补0,可在括号里加减偏移日期。
示例:当前日期为20201201,TABLE_NAME表结构为:
MMDD1 | MMDD2 | MMDD3 |
---|---|---|
执行语句:
INSERT INTO TABLE_NAME(YMD1,YMD2,YMD3) VALUES ('{mm_dd()}', '{mm_dd(2)}', '{mm_dd(-2)}')
返回结果:
MMDD1 | MMDD2 | MMDD3 |
---|---|---|
12-01 | 12-03 | 11-29 |
yyyymm()
用途:返回日期年月,可在括号里加减偏移日期。
示例:当前日期为20201201,TABLE_NAME表结构为:
YM1 | YM2 | YM3 |
---|---|---|
执行语句:
INSERT INTO TABLE_NAME(YM1,YM2,YM3) VALUES ('{yyyymm()}', '{yyyymm(2)}', '{yyyymm(-2)}')
返回结果:
YM1 | YM2 | YM3 |
---|---|---|
202012 | 202102 | 202010 |
yyyy_mm()
用途:返回日期年月,可在括号里加减偏移日期。
示例:当前日期为20201201,TABLE_NAME表结构为:
YM1 | YM2 | YM3 |
---|---|---|
执行语句:
INSERT INTO TABLE_NAME(YM1,YM2,YM3) VALUES ('{yyyy_mm()}', '{yyyy_mm(2)}', '{yyyy_mm(-2)}')
返回结果:
YM1 | YM2 | YM3 |
---|---|---|
2020-12 | 2021-02 | 2020-10 |
mm()
用途:返回日期月份,个位数前补0,可在括号里加减偏移日期。
示例:当前日期为20201201,TABLE_NAME表结构为:
MM1 | MM2 | MM3 |
---|---|---|
执行语句:
INSERT INTO TABLE_NAME(MM1,MM2,MM3) VALUES ('{mm()}', '{mm(2)}', '{mm(-2)}')
返回结果:
MM1 | MM2 | MM3 |
---|---|---|
01 | 03 | 11 |
month()
用途:返回日期月份,个位数前不补0,可在括号里加减偏移日期。
示例:当前日期为20201201,TABLE_NAME表结构为:
MM1 | MM2 | MM3 |
---|---|---|
执行语句:
INSERT INTO TABLE_NAME(MM1,MM2,MM3) VALUES ('{month()}', '{ month(2)}', '{ month(-2)}')
返回结果:
MM1 | MM2 | MM3 |
---|---|---|
1 | 3 | 11 |
year()
用途:返回日期年份,可在括号里加减偏移日期。
示例:当前日期为20201201,TABLE_NAME表结构为:
YEAR1 | YEAR2 | YEAR3 |
---|---|---|
执行语句:
INSERT INTO TABLE_NAME(YEAR1,YEAR2,YEAR2) VALUES ('{year()}', '{year (2)}', '{year (-2)}')
返回结果:
YEAR1 | YEAR2 | YEAR3 |
---|---|---|
2020 | 2022 | 2018 |
lastmonthcurday()
用途:返回上月当天日期,若当天31号而上月不足31天,则返回上月最后一天日期,可在括号里加减偏移日期。
示例:当前日期为20201201,TABLE_NAME表结构为:
A_COLUMN | B_COLUMN | LASTCD |
---|---|---|
DHSWA | CKDHU |
执行语句:
UPDATE TABLE_NAME SET LASTCD=('{lastmonthcurday()}')
返回结果:
A_COLUMN | B_COLUMN | LASTCD |
---|---|---|
DHSWA | CKDHU | 20201101 |
last_month_curday()
用途:返回上月当天日期,若当天31号而上月不足31天,则返回上月最后一天日期,可在括号里加减偏移日期。
示例:当前日期为20201201,TABLE_NAME表结构为:
A_COLUMN | B_COLUMN | LASTCD |
---|---|---|
DHSWA | CKDHU |
执行语句:
UPDATE TABLE_NAME SET LASTCD=('{last_month_curday()}')
返回结果:
A_COLUMN | B_COLUMN | LASTCD |
---|---|---|
DHSWA | CKDHU | 2020-11-03 |
fistday()
用途:返回某月第一天日期,数值前面补0,可在括号里加减偏移月份。
示例:当前日期为20201203,TABLE_NAME表结构为:
FISTDAY1 | FISTDAY2 | FISTDAY3 |
---|---|---|
执行语句:
INSERT INTO TABLE_NAME (FISTDAY1, FISTDAY2, FISTDAY3) VALUES ('{fistday()}', '{fistday(2)}', '{fistday(-2)}')
返回结果:
FISTDAY1 | FISTDAY2 | FISTDAY3 |
---|---|---|
20201201 | 20210201 | 20201001 |
fist_day()
用途:返回某月第一天日期,数值前面补0,可在括号里加减偏移月份。
示例:当前日期为20201203,TABLE_NAME表结构为:
FISTDAY1 | FISTDAY2 | FISTDAY3 |
---|---|---|
执行语句:
INSERT INTO TABLE_NAME (FISTDAY1, FISTDAY2, FISTDAY3) VALUES ('{fist_day()}', '{fist_day(2)}', '{fist_day(-2)}')
返回结果:
FISTDAY1 | FISTDAY2 | FISTDAY3 |
---|---|---|
2020-12-01 | 2021-02-01 | 2020-10-01 |
lastday()
用途:返回某月最后一天日期,数值前面补0,可在括号里加减偏移月份。
示例:当前日期为20201203,TABLE_NAME表结构为:
LASTDAY1 | LASTDAY2 | LASTDAY3 |
---|---|---|
执行语句:
INSERT INTO TABLE_NAME (LASTDAY1, LASTDAY2, LASTDAY3) VALUES ('{lastday()}', '{lastday(2)}', '{lastday(-2)}')
返回结果:
LASTDAY1 | LASTDAY2 | LASTDAY3 |
---|---|---|
20201231 | 20210228 | 20201031 |
last_day()
用途:返回某月最后一天日期,数值前面补0,可在括号里加减偏移月份。
示例:当前日期为20201203,TABLE_NAME表结构为:
LASTDAY1 | LASTDAY2 | LASTDAY3 |
---|---|---|
执行语句:
INSERT INTO TABLE_NAME (LASTDAY1, LASTDAY2, LASTDAY3) VALUES ('{last_day()}', '{last_day(2)}', '{last_day(-2)}')
返回结果:
LASTDAY1 | LASTDAY2 | LASTDAY3 |
---|---|---|
2020-12-31 | 2021-02-28 | 2020-10-31 |
2.2 SQLDML函数
drop_table()
用途:可删除单表或多表。
语法:drop_table("t1, t2")
示例:
drop_table("table_name1");
drop_table("table_name1,table_name2");
truncate_table()
用途:清空表数据,可清空单表或多表。
语法:truncate_table("t1, t2")
示例:
truncate_table("table_name1");
truncate_table("table_name1,table_name2");
create_table()
用途:根据源表格式创建新表。
语法:create_table(table_name, like_name)
table_name:原表表名
like_name:要创建的表表名
示例:根据table_name1创建table_name2
create_table("table_name2","table_name1");
table_exists()
用途:检查表是否存在。
示例:如果没有表TBALE_NAME则创建表,如果有表TBALE_NAME则插入数据。
If(table_exists("TBALE_NAME"))
{ execute (" CREATE TABLE TBALE_NAME
(
A_COLUMN VARCHAR(100),
B_COLUMN VARCHAR(100),
C_COLUMN VARCHAR(100)
)
");
}
else{
execute (" INSERT INTO TBALE_NAME ( A_COLUMN,B_COLUMN,C_COLUMN) VALUES('5','6','7') ");
};
column_exists()
用途:检查列是否存在。
示例:如果表TBALE_NAME里没有D_COLUMN列,则增加列;如果有D_COLUMN列则更新列;
if (column_exists("D_COLUMN")
{
execute (" ALTER TABLE TBALE_NAME ADD D_COLUMN INT ");
}
else{
execute (" UPDATE TBALE_NAME SET A_COLUMN=10 ");
};
2.3 SQL查询函数
execute()
用途:执行sql无返回;
示例:更新表字段
execute (" UPDATE TBALE_NAME SET A_COLUMN=10 ");
execute_obj()
用途:执行sql返回字符串;
示例:查询表行数
String s=execute_obj(" select count(1) from TBALE_NAME ");
execute_data()
用途:执行sql返回数据集;
示例:查询表数据集
List<HashMap<String,String>> s=execute_obj(" select * from TBALE_NAME ");
2.4 日志输出函数
log_into_db()
用途:写日志到数据库。
语法:log_into_db(message);
message:文本,日志内容;
示例:
log_into_db("这是一段测试"); 返回:"这是一段测试" |
---|
log_into_db("{yyyymmdd()}"); 返回:”20201204” |
2.5 跨库转换函数
set_db_by_name()
用途:根据名称选择数据库,后续的脚本将在这个数据库下执行。
示例:
set_db_by_name("EM_CN")
sourceDb_to_targetDb()
用途:从一个数据库迁移表数据到另外一个数据库。
语法:data_gbasetogbase(from_db,sql, from_table_name, table_name)
from_db:源数据库名
sql:sql语句
from_table_name:源表名
table_name:目标表名
示例:
data_gbasetogbase("em_cn", "", "EM_BAS_LZ_LOGIN_INFO","EM_BAS_LZ_LOGIN_INFO");
data_gbasetogbase("em_cn", "select * from EM_BAS_LZ_LOGIN_INFO", "","EM_BAS_LZ_LOGIN_INFO" );
2.6 主机函数
getCpu()
用途:查询linux主机cpu内存使用情况。
语法:getCpu(user,password,ip);
user:用户名
password:密码
ip:主机ip
示例:查询主机ip
getCpu("root","root", "127.0.0.1");
2.7 企业微信对接接口函数
get_qw_to_db_multi()
用途:获取企业微信接口的数据集并存入指定表
语法:get_qw_to_db_multi(https,corpid,corpsecret,httpDataJsonObject,fieldsJsonObject,tableName);
https:请求的ip地址
corpid:企业id
corpsecret:接口Secret
httpDataJsonObject:接口参数json
fieldsJsonObject:接口返回的json对应的表字段
tableName:存入的表名称
示例:获取企业微信客户群列表
jsonObject = new JSONObject(); JSONPath.set(jsonObject,"status_filter",0); JSONPath.set(jsonObject,"owner_filter.userid_list[0]","abel"); JSONPath.set(jsonObject,"cursor","r9FqSqsI8fgNbHLHE5QoCP50UIg2cFQbfma3l2QsmwI"); JSONPath.set(jsonObject,"limit",10); jsonObject1 = new JSONObject(); JSONPath.set(jsonObject1,"group_chat_list[0].chat_id","chat_id"); JSONPath.set(jsonObject1,"group_chat_list[0].status","status"); JSONPath.set(jsonObject1,"next_cursor","next_cursor"); get_qw_to_db_multi("https://qyapi.weixin.qq.com/cgi-bin/externalcontact/groupchat/list","wwc2ec284b7ac1234432","qerfr3443r3f2-tqCYa1vHxg4tuQagBsK2cFM",jsonObject,jsonObject1,"group_chat_list");
get_qw_to_db()
用途:获取企业微信接口的单条数据并存入指定表
语法:get_qw_to_db(https,corpid,corpsecret,httpDataJsonObject,fieldsJsonObject,tableName);
https:请求的ip地址
corpid:企业id
corpsecret:接口Secret
httpDataJsonObject:接口参数json
fieldsJsonObject:接口返回的json对应的表字段
tableName:存入的表名称
示例:获取企业微信客户详情
jsonObject = new JSONObject(); jsonObject1 = new JSONObject(); JSONPath.set(jsonObject1,"external_contact.external_userid","external_userid"); JSONPath.set(jsonObject1,"external_contact.name","name"); JSONPath.set(jsonObject1,"external_contact.avatar","avatar"); JSONPath.set(jsonObject1,"external_contact.corp_name","corp_name"); JSONPath.set(jsonObject1,"external_contact.corp_full_name","corp_full_name"); JSONPath.set(jsonObject1,"external_contact.type","type"); JSONPath.set(jsonObject1,"external_contact.gender","gender"); JSONPath.set(jsonObject1,"external_contact.unionid","unionid"); JSONPath.set(jsonObject1,"external_contact.position","position"); JSONPath.set(jsonObject1,"external_contact.external_userid","external_userid"); get_qw_to_db("https://qyapi.weixin.qq.com/cgi-bin/externalcontact/get?external_userid=ZhangTong&cursor=NEXT_CURSOR","wwc2ec284b7ac97620","2mPKB4Mk5VrSZe9sedD-tqCYa1vHxg4tuQagBsK2cFM",jsonObject,jsonObject1,"externalcontact");