kettle pg库存储过程的调用细节处理
kettle 调用存储过程的时候会有一些设置或者配置上的细节是需要注意的,比如说调用pg库的存储过程时,比如该存储过程没有参数,kettle调用存储过程的时候可能搜不到这个存储过程名字,可以直接把该函数名字配上去而且还要记得带括号:p_aaaa()
如果单单写:p_aaaa 就不会成功调用
如下脚本:
----建立存储过程和kettle调用成功模板,因为该存储过程没有参数,kettle调用的时候一定要在名字配的时候输入:p_aaaa()
----kettle返回值名称不用选
CREATE SEQUENCE "xulie"
INCREMENT 1
MINVALUE 1
MAXVALUE 9223372036854775807
START 1
CACHE 1;
drop table aaaa;
drop table bbbb;
create table bbbb(id integer not null default nextval('xulie'::regclass),--序列号
ajlcid character varying(500)) ;
INSERT INTO bbbb (ajlcid) values ('123'),('456'),('789');
select * from bbbb;
create table aaaa (id integer not null default nextval('xulie'::regclass),--序列号
ajlcid character varying(500)) ;
create or replace function p_aaaa() returns void as
$body$
begin
raise notice '% 准备数据',date_trunc ('s',clock_timestamp()) ;
truncate table aaaa;
insert into aaaa
(ajlcid)
select ajlcid from bbbb;
end ;
$body$ language plpgsql ;
select p_aaaa();
select * from aaaa;
select * from bbbb;
由于代码上面有序列nextval('xulie'::regclass),没附上相应代码,试的话可以自己写一个简单的序列代码,命名为'xulie'就好;
如果是带参数的函数,那能在kettle检索到的话,那就在调用的时候不要加括号:p_aaaa
如果是这样:p_aaaa() 会报错调用失败
如下图
---如果kettle 搜不到pg库的存储过程,可以试试把命名处理一下,带参数的pg库存储过程,记得不要在kettle存储过程设置里加括号~
create table aa (id integer not null default nextval('xulie1'::regclass),--序列号
ajlcid character varying(500))--案件流程id
with (oids=false);
create table bb(id integer not null default nextval('xulie1'::regclass),--序列号
ajlcid character varying(500))--案件流程id
with (oids=false);
INSERT INTO bb (ajlcid) values ('123'),('456'),('789');
create or replace function funid(xxx varchar ) returns void as
$body$
begin
raise notice '% 准备数据',date_trunc ('s',clock_timestamp()) ;
insert into aa
(ajlcid)
select ajlcid from bb;
end ;
$body$ language plpgsql volatile;
select funid('1')
select * from aa;
或者如果有时在kettle里搜不到该存储过程或者函数,可以试试在数据库里把该存储过程或者函数改下名字,改个长一点的或许就能在kettle显示了,之前我就遇到这么一个坑。