存储过程数据集
存储过程(Stored Procedure)是一种在数据库中存储的复杂程序,用户通过调用存储过程来执行这个程序。存储过程是一组为了完成特定功能的 SQL 语句集,经编译后存储在数据库中。用户通过调用存储过程来执行这组 SQL 语句。
存储过程是保存在物理数据库里边的,因此应用这边并不会自行定义和保存存储过程。应用只是对数据库已存在的存储过程进行调用,并处理和封装返回结果。
在使用场景这块,需要着重说明:
- 首先这是个数据集,因此适合于需要通过存储过程返回二维数据的场景。
- 其次适合于复杂逻辑处理后的结果返回和展示。存储过程因为可以执行一组 SQL 语句,可以实现复杂逻辑的计算,并返回最终结果。对比视图数据集和 SQL 数据集,适应更多的计算、修改和查询场景。
- 如果存储过程不返回数据,则不应该使用存储过程数据集来调用。如果是这类不返回数据的调用,可以定义服务接口,在接口中来再调用存储过程。
数据集设计
在动态数据集的右侧,点击+按钮,可以创建新的 存储过程 数据集:
设置数据库中的存储过程名
文章开头提到,由于存储过程是存储到数据库中的,因此数据集这边只是配置需要调用哪个存储过程即可。
在存储过程名输入框中输入数据库中已定义的存储过程标识。
- 先在数据库中找到对应的存储过程标识
- 再设置到数据集定义中
如果是要跨数据库调用,设置存储过程名为 数据库.实例名.存储过程名,如下图所示
添加输入参数
如果存储过程定义了输入 IN 参数,数据模型这块也可以对应传入参数。
添加参数时,参数名称要和存储过程那边定义的一致,并且参数分类选择查询参数,勾选输入。同时设置一个默认值,这样不手动传参调用存储过程也不会报错。
添加输入参数后,后续在页面中,可对存储过程数据集设置相应的参数值。
添加输出参数
由于不同数据库,在输出参数这块使用不一致。因此这块需要根据不同数据库类型来设置。
MySQL 不需要额外设置输出数据集。
只需要在存储过程最后, select 返回数据即可。比如:
BEGIN
update main_product set needBook = 1 where stock >= paramStock;
select * from main_product;
END
数据模型会根据存储过程返回的列来映射模型这边的列。
设计返回结构
由于是数据集,也就是存储过程也需要返回数据。如果数据集不返回数据,后续使用上会有问题,查询会提示:
因此如果存储过程不返回数据,不建议定义存储过程数据集来调用,使用服务接口那边编写代码来调用。
存储过程定义时,可以采用 select xxx from xxx 语句来返回数据,那么在数据模型定义这边,需要把返回列也定义好。
存储过程数据集要返回的列,可以在结构页签中自行设计。需要快捷操作的话,可以点击自动同步功能,会根据返回的列,自动把结构对应添加上去:
设计完成后,点击页面右上角的保存按钮即可保存。
保存路径
- 数据集的模型描述文件
xxx.data.m 保存在当前模块的根目录下,比如 main 模块的根目录下:
在 .data.m 文件中,会使用 <class type="storedProcedure" 来标识存储过程数据集:
使用场景
由于存储过程可以定义多条查询和修改的语句,因此数据集不仅可以做查询使用,还可以对数据进行新增、修改和删除等操作。
存储过程数据集,在前端页面会以数据组件的方式来使用。
将数据集拖动到页面后,该数据组件就会在各组件进行绑定使用了。这里和表数据集使用比较类似,这里不再赘述。
如果存储过程数据集定义了输入参数,可以在数据集的属性编辑中对参数进行设置:
设置后,在调用存储过程的时候,会传入相应的参数过去。