欢迎讨论:最详细准确的KETTLE调用存储过程和带有返回值的存储函数讲解!

-发帖者:
-参与讨论....
【主题】:最详细准确的KETTLE调用存储过程和带有返回值的存储函数讲解

1.前言

最近用到了kettle的存储过程,看到网上写的一些说明文档,大都说的含糊其辞,不太准确,这里分析了一下kettle的源码,对其用法大致的讲解一遍。这里大致看一下kettle的组件界面,

大致基本上都能看懂,但是大多数都被kettle的翻译误人子弟,组件是调用存储过程,但是存储过程中也存在一种特殊的类型,叫做存储函数。而且kettle也是支持调用存储函数的,下面讲解一下存储过程和存储函数的大致区别:

2.存储过程和存储函数介绍

语法区别:关键字不一样,存储函数比存储过程多了两个return。

本质区别:存储函数有返回值,可以自定义函数;而存储过程没有返回值。

如果存储过程想实现有返回值的业务,我们就必须使用out类型的参数。 即便是存储过程使用了out类型的参数,其本质也不是真的有了返回值,而是在存储过程内部给out类型参数赋值,在执行完毕后,我们直接拿到输出类型参数的值。

3.kettle调用存储过程

由于存储过程本质上不存在返回值,所以 ”返回值类型“ 选项一定要为空,否则执行会报错,找不到该存储过程。

*******简单的数据叠加求和存储过程 

 

4.调用存储函数 

由于存储是含有返回值的,所以要加上返回值字段名称。

5.总结 

关于存储过程和存储函数的sql脚本:

存储过程1:带返回值:
1 drop procedure if exists proc_addNum;
2 create procedure proc_addNum (in x int,in y int,out sum int)
3 BEGIN
4 SET sum= x + y;
5 end
存储函数1:带返回值:
delimiter $$
create function getCdkNumById(tid int) returns INT
DETERMINISTIC
begin
   declare dnum INT;
   set dnum=(select douNum from t_cdk where id=tid);
   return (dnum);
end$$
delimiter;

 

 发表评论     发表时间:『2020-01-02 23:09:07』


扫描二维码关注网站最新动态