系统运行过程中一些特殊逻辑或者需要外部系统提供数据支持的时候,程序会在相应代码中调用一些固定的存储过程以实现相关逻辑控制。
在SQL Server中这些存储过程可以有,也可以没有,没有的情况下不会影响系统原有逻辑。
但在MySQL或者MariaDB中,这些存储过程是必须要有的,内容可以为空,不做任何操作,如果没有这些存储过程则系统会报错。
举个例子,在前台页面做条码报工的时候,系统会去调用 [p_CheckSNBarcodeCanReport] 存储过程,此时如果数据库中存在此存储过程,则您可以在此存储过程中做一些其他额外的校验逻辑,以实现特殊管控。例如:此条码未在ERP数据库中完成注册则不允许报工等控制。
CREATE PROCEDURE [dbo].[p_CheckSNBarcodeCanReport]
@barcode nvarchar(200)
AS
BEGIN
SET NOCOUNT ON;
declare @count int
select @count = count(1) from ERP..BarcodeRecord where Barcode=@barcode
if @count>0 begin
RAISERROR ('此条码未注册',16,1)
end
END
如果数据库抛出了异常则程序会终止接下去的操作,例如上述存储过程如果抛出异常,则该条码不能继续报工,且页面会显示异常信息:“条码未注册”。
类似的功能节点还有如下几个:
存储过程 | 参数 | 说明 |
---|---|---|
p_CheckSNBarcodeCanReport | @barcode nvarchar(200) | 通过存储过程判断条码能否报工 |
p_CheckSNBarcodeCanOnline | @barcodeId bigint,@dispatchId bigint | 通过存储过程判断条码能否上线 |
p_CheckDispatchCanStart | @dispatchId bigint | 通过存储过程判断派工单能否开工 |
p_CheckReportCanConfirmQty | @reportId bigint,@qty decimal(18,6) | 用数据库检查报工单是否可以确认 |
p_CheckReportCanDelete | @reportId bigint | 用数据库检查报工单是否可以删除 |
p_CheckDispatchCanDelete | @dispatchId bigint | 用数据库检查派工单是否可以删除 |
p_CheckDispatchCanReport | @dispatchId bigint | 检查派工单能否报工 |
p_CheckEmployeeCanReport | @dispatchId bigint, @employeeId bigint | 检查人员能否报工 |
p_CheckSNBarcodeCanGenerate | @barcode nvarchar(200),@dispatchId bigint | 用存储过程判定SN码是否可以生成 |
p_CheckBarcodeCanReportIn | @barcodeId bigint | 用存储过程判断条码是否能生产入库 |
p_CheckBarcodeCanScanBill | @barcodeId bigint,@warehouseId bigint,@wareareaId bigint,@billtype nvarchar(200) | 用存储过程判断条码是否能在单据扫描 |
p_AddDispatchMaterial | @dispatchId bigint | 生成补料单 |