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

作者: 小飞牛_666 | 来源:发表于2019-09-27 00:23 被阅读0次

      第一次使用 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
      到这里总算成功了,虽然看上去简单,但是在问题没有解决之前还是挺绝望的,为以后再次踩同一个坑,也为了后来人避免踩这个坑,做了个总结,如果觉得有帮助给个赞,谢谢!
      您的支持是我坚持总结的动力 * ^_^ *

    相关文章

      网友评论

        本文标题:Kettle 调用 greenplum 数据库的存储过程

        本文链接:https://www.haomeiwen.com/subject/slplyctx.html