datastage调用存储过程
创建测试表
create table DB2INST1.PROC_RUN_LOG(
ETL_DT varchar(8) not null,
PROC_NAME varchar(50) not null,
RUN_TIME timestamp
);
创建测试存储过程
#PROC_TEST1
CREATE PROCEDURE "DB2INST1"."PROC_TEST1" (ETL_DT varchar(8))
LANGUAGE SQL
BEGIN
insert into DB2INST1.PROC_RUN_LOG values(ETL_DT,'DB2INST1.PROC_TEST1',current timestamp);
END
#PROC_TEST2
CREATE PROCEDURE "DB2INST1"."PROC_TEST2" (ETL_DT varchar(8),OUT LOGCOUNT int)
LANGUAGE SQL
BEGIN
declare sqlcode INTEGER DEFAULT 0;
declare sqlstate CHAR(5);
declare v_step int;
declare err_text varchar(1024);
declare message_text varchar(1024);
-- 定义异常处理
declare exit handler for SQLEXCEPTION
begin
get diagnostics exception 1 err_text = message_text;
set message_text=trim('v_step='||char(v_step))||' '||substr(err_text,1,8)||substr(err_text,locate('"',err_text)-1);
SIGNAL SQLSTATE '72342' SET message_text=message_text;
end;
set v_step=1;
insert into DB2INST1.PROC_RUN_LOG values('20190407','DB2INST1.PROC_TEST1',current timestamp);
select count(1) into LOGCOUNT from DB2INST1.PROC_RUN_LOG;
END
PROC_TEST1对应的DS(存储过程只带输入参数)
(1)配置DS参数
(2)引用相关stage
(3)配置Stored_Procedure_0
Genaral标签下,选择数据库类型,配置数据库名,用户名,密码
Syntax标签下,配置存储过程名及调用语法
(3)编译运行作业即可
PROC_TEST2对应的DS(存储过程带输入输出参数)
(1)配置DS参数
(2)引用相关stage
(3)配置Stored_Procedure_0
Genaral标签下,选择数据库类型,配置数据库名,用户名,密码
Syntax标签下,配置存储过程名及调用语法
Out-->Columns列下添加输出列(如有多个输出列时,在此配置全部输出列的名称)
Stage-->Parameters下配置映射关系(如果有多个输出列时,在此配置多行映射)
保存编译运行作业即可
如有疑问,可加微信一起交流