风一样的虞 2021-06-03 18:11 采纳率: 0%
浏览 31

Kettle 怎样执行事务(利用存储过程除外)?

我需要执行一个 if else 结构的事务块,但是在 ‘执行sql脚本‘控件一直执行不成功,如下语句

declare tempCount int;
begin
  select count(*) into tempCount from MasterIndex where DATAINDEX='?';
  if tempCount>0 then
    update MasterIndex set JCGWINDEX='?',MODIFYTIME=sysdate where IDCARDNO='?' and NAME='?';
  else
    insert into MasterIndex (DATAINDEX,IDCARDNO,NAME,JCGWINDEX,MODIFYTIME) values ('?','?','?','?',sysdate);
  end if;
  commit;
end;

  • 写回答

1条回答 默认 最新

  • 憧憬blog 2023-03-14 21:45
    关注

    针对这个问题,Kettle 是通过使用 JDBC 库来执行 SQL 语句实现事务的。但是,由于 Kettle 并不支持存储过程的执行,所以你需要将这个事务块拆分成几个 SQL 语句分别执行。

    对于你给出的 SQL 语句,可以重构成以下三个 SQL 语句:

    1. 查询数据: select count(*) from MasterIndex where DATAINDEX=?;
    2. 更新数据: update MasterIndex set JCGWINDEX=?, MODIFYTIME=sysdate where IDCARDNO=? and NAME=?;
    3. 插入数据: insert into MasterIndex (DATAINDEX,IDCARDNO,NAME,JCGWINDEX,MODIFYTIME) values (?,?,?,?,sysdate);

    然后,通过使用 Kettle 中的‘执行 SQL 脚本’控件,分别执行这三个 SQL 语句,并在这三个控件之间设置一个转换步骤来实现事务性的操作。如果其中任何一个 SQL 语句执行失败,整个事务都将回滚。

    评论

报告相同问题?

悬赏问题

  • ¥15 计算二重积分∫∫e^(x+y)dxdy,其中0≤x≤1,0≤y≤1,试分别用复合辛普森公式(取n=4)以及高斯求积公式(取n=4)计算积分 给出matlab程序
  • ¥15 opencv 无法读取视频
  • ¥15 用matlab 实现通信仿真
  • ¥15 按键修改电子时钟,C51单片机
  • ¥60 Java中实现如何实现张量类,并用于图像处理(不运用其他科学计算库和图像处理库))
  • ¥20 5037端口被adb自己占了
  • ¥15 python:excel数据写入多个对应word文档
  • ¥60 全一数分解素因子和素数循环节位数
  • ¥15 ffmpeg如何安装到虚拟环境
  • ¥188 寻找能做王者评分提取的