存储过程及Kettle初体验,感觉网上都不清楚,做了demo,简单记录下。
存储过程参考(视频,评论区有相关文档) kettle参考(视频,评论区有相关文档)
1.存储过程
本次存储过程demo主要是从左表到右边的实现过程。
直接贴上代码,其实很简单,就是要理解写法,存储过程中大部分都得给个label,相当于前端给id的意思,方便调用。 过程中大致就是创建存储过程名称,定义变量名,定义结束标志,然后这里用了游标。
处理过程也可以在select时候处理的,一样的。
drop PROCEDURE IF EXISTS p;
CREATE PROCEDURE p()
BEGIN
DECLARE id VARCHAR(255);
DECLARE `name` VARCHAR(255);
DECLARE created_date VARCHAR(50);
DECLARE score VARCHAR(50);
DECLARE done INT DEFAULT FALSE;
DECLARE cur CURSOR FOR SELECT
t1.id,
t1.`name`,
t1.created_date,
t1.score
from student_info t1;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur;
read_loop: LOOP
FETCH cur INTO id,`name`,created_date,score;
IF done THEN
LEAVE read_loop;
END IF;
CASE
WHEN score <= 100 and score >= 85 THEN set score="优秀";
WHEN score < 80 and score >= 60 THEN set score="良好";
WHEN score < 60 THEN set score="不及格";
ELSE set score="未知" ;
END CASE;
SET created_date=date_format(created_date,'%Y年%m月%d日');
INSERT INTO student_result VALUES (id,`name`,created_date,score);
END LOOP;
CLOSE cur;
END
通过call p来调用该存储过程,执行一次,后续只需调用就好了。
call p;
2.Kettle
实现过程功能跟上面相同,只不过是通过kettle实现,直接用kettle不知道怎么处理,因此还是调用了一个存储过程来处理。
大致过程:写了一个接口来获取数据库的参数,通过kettle调用api获取参数,然后通过调用存储过程进行处理,再插入新表。
接口代码就不放了
(1)生成记录
主要是写了获取接口的url以及type类型,自己写的接口不需要token什么的,有需要自己写哈。
2.HTTP client
HTTP client是get,HTTP post是post,REST client是两者都可以。 这里的url是之前写的,如果只是想我这样,只有URL请求,可以不写生成记录,直接这边URL填写路径,data是你返回值的结果。
3.JSON input
这里我有两个json,主要是因为我还传了一个total,他这个一次只能获取同一级的数值,具体看我的json,data和total是同一层。
{
"data": {
"data": [
{
"id": "1001",
"name": "李四",
"createdDate": "2022-03-10 14:28:52",
"score": 90
},
{
"id": "1002",
"name": "王五",
"createdDate": "2022-06-10 16:28:52",
"score": 70
},
{
"id": "1003",
"name": "张三",
"createdDate": "2022-08-10 09:28:52",
"score": 59
}
],
"total": 3
},
"code": "ok"
}
$表示当前,.是获取当前,…是递归获取,具体参考文档哈。
4.存储过程
多个参数的话,就需要自己写参数,只有一个可以 直接返回值那里。 这里另外写了一个存储过程,包含输入和输出。特别注意的是kettle调用存储过程貌似不能用游标,所以加了total这个参数。
drop PROCEDURE IF EXISTS p1;
CREATE PROCEDURE p1(IN created_date datetime, IN score INT(6), IN total INT(2), OUT date VARCHAR(50), OUT `level` VARCHAR(50))
BEGIN
read_loop: LOOP
IF total<=0 THEN
LEAVE read_loop;
END IF;
SET total = total-1;
CASE
WHEN score <= 100 and score >= 85 THEN set `level`="优秀";
WHEN score < 80 and score >= 60 THEN set `level`="良好";
WHEN score < 60 THEN set `level`="不及格";
ELSE set `level`="未知" ;
END CASE;
SET date=date_format(created_date,'%Y年%m月%d日');
END LOOP;
END
5.表输出
表连接设置如下
|