为什么要用动态宏

为什么要用动态宏?动态宏是相对于普通宏而言,普通宏作用方式是将宏值直接替换sql中的标识名,而动态宏是先对宏表达式进行计算,再将计算的结果替换到sql中的标识名。这就使得动态宏往往能够实现一些参数和普通宏不能实现的功能,例如:数据权限控制、动态传递过滤条件等。下面介绍两个动态宏的业务场景:

数据权限控制

希望实现系统中登陆用户都可以看到其下级用户信息,例如1207角色的用户可以看到所有角色为1208,1209,1210,1211,1212,1213的用户信息,而1208角色的用户可以看到角色为1210或1211的下级用户信息等。

1.sql为:select distinct * from t_res where ${xiaji}

2.定义宏表达式为:if(int(1207) in @sys_Orgs_ForDAUC,”org_id in (1208,1209,1210,1211,1212,1213)”,if(int(1208) in @sys_Orgs_ForDAUC,”org_id in (1210,1211)”,if(int(1209)  in @sys_Orgs_ForDAUC,”org_id in (1212,1213)”,”1=1″)))

动态传递过滤条件

希望实现在arg1中输入一个数字,来选择要进行过滤的字段,例如1代表订单ID,2代表货主地区,arg2中输入检索关键字。例如在arg1中输入1,arg2中输入10456,就是过滤出订单ID为10456表。

1.sql为:select * from demo_orders where ${orders}

2.设置orders为动态宏:

表达式为:if(@arg1==”1″,”订单ID=’”+ @arg2+”‘”,  ”货主地区=’”+ @arg2+”‘”)

并定义arg1和arg2参数的类型、默认值,如下图所示:

本文标签: