版本:IBM InfoSphere DataStage V11.3.1
操作系统:linux redhat 6.4
需求场景:
DS调度数据库中存储过程,需要带入输入输出参数。
环境准备:
数据准备
数据库账户:scott 创建存储过程名getSalaryByEmpNo
CREATE OR REPLACE PROCEDURE getSalaryByEmpNo(eNo IN NUMBER,
salary OUT NUMBER) AS
BEGIN
SELECT SAL INTO salary FROM EMP WHERE EMPNO = eNo;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
END;
DS环境变量配置
配置scott用户的环境变量
开发过程
1 创建作业如下
2 定义输入变量值 V_eNo
3 设置存储过程的连接信息
设置存储过程属性,选择存储过程类型为Source(表示作为源),在Syntax属性栏手工设置输入参数pa的值为1,输出参数pb用:1作为占位符,表示将存储过程的结果输出到后续的DataStage组件(Peek)。
4 定义输出变量salary
5 调用 手工输入参数 V_eNo
一般这个参数,我们可以写shell 脚本来获取,之前有些过文章。
6 查看日志
运行作业,日志显示存储过程getSalaryByEmpNo被DataStage调用,并输出正确结果。
关于Stored Procedures官网一些介绍:
Stored Procedures 阶段支持三种过程类型:
变换过程
源过程
目标过程
源过程和目标过程将列元数据用作参数以传入过程中。您不必输入参数信息,如果输入了此信息,该阶段会将其忽略。 源过程将列元数据用作输出参数(以从数据库中读取)。 目标过程将列元数据用作输入参数(以写入数据库)。
注:源过程和目标过程不能同时具有输入和输出链接。必须使用变换过程。
源过程能够执行包含 SQL SELECT 语句的存储过程。它可以:
针对作业调用一次
与输出链接一起使用
返回输出参数
返回多行
目标过程能够执行包含 SQL INSERT 语句的存储过程。它可以:
针对作业调用一次
针对每行调用一次(缺省值)
与输入链接一起使用
传递输入参数
如果希望将参数与列元数据混合并匹配, 请使用变换过程,并在参数网格中指定存储过程参数。
变换过程在数据库中执行各种逻辑决策。它可以:
针对作业调用一次
针对每行调用一次(缺省值)
使用参数网格传递输入参数
使用参数网格返回输出参数
如果在作业过程当中使用(输入和输出链接),那么传递列
仅与输入链接一起使用
仅与输出链接一起使用
与输入链接和输出链接一起使用
返回多行
所有过程都可以:
返回可映射到数据流的错误代码(由用户定义或通过数据库定义)
返回可映射到数据流的消息(由用户定义或通过数据库定义)
允许用户定义的致命和警告代码恢复决策
定义事务隔离级别
当执行插入行的过程时,允许指定提交大小
允许用户定义的过程执行语句(不常用)
允许在读取时返回多行注:Stored Procedures 阶段不执行任何 SQL 语句。 它专用于存储过程的执行。本机阶段用于任何 SQL 语句的执行。
Teradata
通过使用 Stored Procedure 阶段,可以从InfoSphere® DataStage®作业调用 Teradata 存储过程、宏和函数。 不能从InfoSphere DataStage创建 Teradata 存储过程、宏或函数。应该使用 Teradata 自有的用户接口,如 BTEQ 或 Teradata SQL Assistant(在 Teradata Tools and Utilities 7.0 之前称为 Queryman),创建这类对象。
SQL Server
存储过程是一组 Transact-SQL 语句,这些语句被编译成单个执行计划,使用一个名称进行存储并作为一个单元来处理。
Stored Procedure 阶段支持调用 Microsoft SQL Server 存储过程(内部和外部)和返回单一值的用户定义的函数。
注:返回表的用户定义的函数更适合从 ODBC 阶段调用,这是因为生成的 SELECT 语句必须查询表。
支持标量用户定义的函数。不支持将全局游标和使用游标变量的输出参数用作返回数据的方法。
Microsoft SQL Server 存储过程支持输入和输出参数。
总结:
多思考,多实践。
后续:
对于
begin
-- Call the procedure
sp_fct_capitalsource(v_date => :v_date,
v_return => :v_return);
end;
调度如附件