Skip to content

3.19 存储过程

存储过程专指数据库里面的存储过程,我们可以在数据库中写好存储过程后,在前端进行调用,这样能够满足更复杂的数字化处理需求。存储过程的使用分为编写和调用两个步骤。

  • 编写是直接在数据库中操作,对数据库熟悉的伙伴可以通过后端数据库编写各种方法的存储过程,在编写存储过程时,可能会用到数据字段来查找表和字段的名称对应关系。
  • 存储过程编写完成后,就可以通过Workfine设计器进行调用,调用的过程就是传参和取数的过程。

下面,我们将使用具体的例子来给大家介绍存储过程的使用。

3.19.1 存储过程的编写

Workfine支持主流的四种数据库,本文以SQL Server为例,讲解一个简单存储过程的新建使用

1、打开SSMS(SQL Server Management Studio,下同),登录帐套所在数据库实例

img 图:链接服务器

2、右击帐套数据库,选择"新建查询"

img 图:新建查询

3、在查询分析器中输入以下内容:

create procedure my_procedure @insert_data varchar(500) as begin drop table if exists insert_test create table insert_test( my_data varchar(500) ) insert into insert_test values (@insert_data) end

图:在查询分析器中输入代码

注:该存储过程名称为:my_procedure,定义了一个传入参数:@insert_data,主要功能为新建一个数据表并插入一行记录。实现了如下的动作:

1)尝试删除insert_test表,如果它存在

2)新建一个名称为insert_test的数据表,它拥有一个字段:my_data,该字段数据类型为:varchar(500)

3)向insert_test表中插入一行数据,内容为传递的参数@insert_data

4、按F5或执行按钮,将这个存储过程创建

img 图:命令完成

5、创建好的存储过程可以在左侧资源管理器中查看,双击帐套数据库=>可编程性=>存储过程(如果看不到可以右击存储过程分类,选择刷新)

img 图:查看存储过程

关于存储过程的详细开发和使用说明,可以参照SQL Server官方教程学习

存储过程的开发和使用:https://learn.microsoft.com/zh-cn/sql/relational-databases/stored-procedures/stored-procedures-database-engine?view=sql-server-ver16

3.19.2 存储过程的调用

Workfine支持在表单的保存/删除时执行存储过程,也支持在按钮里直接调用。

1、保存/删除时调用

1、打开需要绑定的模板,定义一个主表字段,用于传递存储过程的参数

img 图:定义主表字段

2、点击菜单栏右侧更多=>存储过程

img 图:打开存储过程

3、点击新建,输入一个记录名称,在存储过程下拉中找到上一步建立的my_procedure

img 图:新建存储过程

4、选择一个执行时机,希望这个存储过程在什么情况下执行。在此案例里,我们选择"保存时执行"

img 图:执行时机为保存时执行

5、选择完存储过程后,参数列表里就会将该存储过程下需要的所有参数提取出来。我们支持直接选择主表字段或编写表达式来传递参数。在此案例里,我们选择刚才定义的主表字段

img 图:设置参数

6、点击新建按钮,完成新建设置

img 图:完成新建

7、登录应用端,新建表单并填入需要传参的内容,点击保存按钮

img 图:填写传参内容

8、登录数据库,检查表是否创建成功,内容是否一致即可

img img 图:检查是否创建成功

2、按钮点击时调用

1、打开模板,点击上方的"按钮/事件"

img 图:打开按钮/事件

2、新建一个按钮,设置好名称和显示名称

img 图:新建按钮

3、在显示位置里勾选表单顶部

img 图:设置按钮的显示位置

4、点击执行列表右侧的新增,选择存储过程并选择新建的my_procedure

img 图:给按钮绑定存储过程

5、点击存储过程右侧的设置按钮,设置参数绑定和传递

img 图:设置参数绑定和传递

6、将主表字段填写到取值传递中去,依次点击保存和新建,建立按钮

img 图:建立按钮

7、登录应用端,新建表单并填入需要传参的内容,点击保存按钮

img 图:输入传参内容

8、登录数据库,检查表是否创建成功,内容是否一致即可

img img 图:检查是否创建成功

小结: 在Workfine中,由于有表间公式的功能,大多数数字化场景的处理并不会用到存储过程。在目前的使用经验中,只有特定的一些递归循环的场景才有可能用到存储过程,比如MRP的运算,经营目标的拆解和统计等。其余基本都可以通过表间公式的功能来处理,我们在掌握存储过程的同时,更应该用简单的方式来处理问题。