Kettle 调用 greenplum 数据库的存储过程

  第一次使用 kettle 以及 greenplum 数据库,特别是 greenplum 数据库网上资料特别稀缺,遇到问题都不知道去哪儿查找,今天总结下遇到过的问题。
  今天主题是:如何使用 kettle 调用 greenplum 编写的存储过程。

一、创建一个简单的学生表,用来给存储过程做简单的数据插入
--创建表
create table student(
    sid NUMERIC,
    sname varchar(20),
    sdate varchar(8)
);

二、创建操作学生表的存储过程
--创建存储过程
create or replace function My_LALIAN_PRO(IN S_ID NUMERIC, IN S_NAME VARCHAR, IN S_DATE VARCHAR)
    returns void 
as $$ 
begin
        --插入学生表
        insert into odmdb.odm.student values(S_ID, S_NAME, S_DATE);

end;
$$ 
language plpgsql;

三、在数据库中测试存储过程
--执行存储过程
select My_LALIAN_PRO(1,'feiniu','201901');

执行结果如下:
a.png

从图中可以看出,我们编写的存储过程没有问题。

四、使用 Kettle 执行 存储过程

在 sql 脚本窗口中填写调用语句:

select My_LALIAN_PRO(2,'tangtang','201902');

如下图:
b.png
五、执行转换

  这一步最坑爹了,眼看到嘴的鸡腿却让他给飞了,执行时候竟然报 "存储过程不存在" 报错,这到底是为何?在网上找了差不多两天,在绝望之际在过程名前面加用户名,但是报一样的错误,此刻差点就从楼上跳到游泳池去了。。。
c.png
六、问题的解决

  后来发现我们的 greenplum 和 oracle 的过程调用有那么一丢丢不同,oracle 可以使用 "用户名.过程名" 方式进行调用,然而这种方式对于我们的 greenplum 大人不适合呀;经过观察发现,我们的 过程 和 表 都存放在 数据库的模式中,因此我们可以直接从这里入手,方式就是 "数据库.模式.存储过程/表名" ,现将过程中的表前面做如下修改:
d.png

接下来在 kettle 脚本里边将 sql 语句改为:

select odmdb.odm.My_LALIAN_PRO(2,'tangtang','201902')

我们在执行发现已经成功了:
e.png

此时发现表中多了一条数据:
f.png

  到这里总算成功了,虽然看上去简单,但是在问题没有解决之前还是挺绝望的,为以后再次踩同一个坑,也为了后来人避免踩这个坑,做了个总结,如果觉得有帮助给个赞,谢谢!
  您的支持是我坚持总结的动力 * ^_^ *
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容