Skip to main content

此示例展示如何在编排平台上调用数据库的存储过程(PROCEDURE)和存储函数(PROCEDURE)

适用场景

MySQLOracle存储过程调用(其余数据库也能支持,本流程暂未测试)

MySQLOracle存储函数调用(其余数据库也能支持,本流程暂未测试)

◇ 存储函数和存储过程一样,都是在数据库中定义一些 SQL 语句的集合。存储函数一般用于计算和返回一个值,可以将经常需要使用的计算或功能写成一个函数

◇ 存储函数与存储过程的区别

  • 存储函数有且只有一个返回值,而存储过程可以有多个返回值,也可以没有返回值

  • 存储函数只能有输入参数,而且不能带in

实现方式

◇ 通过 ExecuteStoreProcedure组件实现

◇ 存储过程和存储函数定义

-- FUNCTION
delimiter //

create function bgy_wy.func_by_codeid_get_name(codeid varchar(64))
returns varchar(64)
READS SQL DATA
begin
return (select EMP_NAME from mdm_yg_query h where h.CODEID=codeid);
end //

delimiter ;
SELECT bgy_wy.func_by_codeid_get_name("27")

-- PROCEDURE
delimiter //
CREATE PROCEDURE bgy_wy.proc_by_codeid_get_name(IN p_codeid VARCHAR(10), OUT p_name VARCHAR(10))
BEGIN
set p_name=(select EMP_NAME from mdm_yg_query h where h.CODEID=p_codeid);
SELECT p_name;
END //
delimiter ;
CALL proc_by_codeid_get_name("27", @p_name)
-- 查看定义
SHOW CREATE { PROCEDURE | FUNCTION } sp_name

编排流程

实现步骤

  1. GenerateFlowFile mock流文件启动流程

  2. UpdateAttribute生成调用存储过程的请求参数(Params),请求参数格式固定

    updateattribute

    ExecuteStoreProcedure组件参数属性里面不支持表达式,所以如果参数需要通过变量获取值,可以在前面用 UpdateAttribute来设置 Params 参数(此时需要将ExecuteStoreProcedure组件的参数设置为空,否则前面传递过来的Params会不生效)

  3. ExecuteStoreProcedure配置需要调用的方法名,并指定是调用存储过程还是存储函数

    image-20211109171506070

    • 调用存储过程或存储函数的INOUTIN/OUT参数通过 参数属性来指定;参数编写的语法固定,不能随意定义;可以通过高级来在页面上完成参数设置

    advanced

    • 存储函数名称是大小写敏感的,所以配置的时候注意要和数据库中定义的函数名保持一致

流程模板

下载模板