mybatis调用Oracle存储过程

本文介绍了如何使用MyBatis调用Oracle存储过程来执行库存的增减操作。首先,创建了一个Oracle存储过程,根据equipType1和equipType2查询库存记录,如果存在则进行数量的增减,否则插入新记录。接着,展示了MyBatis的相关配置,包括Mapper.xml、Mapper.java、Dao层和服务层的实现。这个解决方案经过验证,可以正常工作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.创建Oracle存储过程完成库存加减操作,如果按equipType1和equipType2查询记录存在,则在原数量基础上进行增减;如果查询记录不存在,则新增一条记录。

存储过程创建如下:

 

CREATE OR REPLACE 
PROCEDURE "UPDATE_EQUIPMENT_STOCK" (P_EQUIP_TYPE1 IN NUMBER, P_EQUIP_TYPE2 IN NUMBER, P_NUM IN NUMBER, P_STATION_ID IN NUMBER, P_RESULT OUT NUMBER)
AS
STOCK_NUM NUMBER DEFAULT 0;
E_COUNT NUMBER DEFAULT 0;
BEGIN
SELECT COUNT(ID) INTO E_COUNT from EQUIPMENT_STOCK WHERE EQUIP_TYPE1=P_EQUIP_TYPE1 AND EQUIP_TYPE2=P_EQUIP_TYPE2;
IF (E_COUNT > 0) THEN
SELECT E_STOCK INTO STOCK_NUM from EQUIPMENT_STOCK WHERE EQUIP_TYPE1=P_EQUIP_TYPE1 AND EQUIP_TYPE2=P_EQUIP_TYPE2;
STOCK_NUM := STOCK_NUM + P_NUM;
UPDATE EQUIPMENT_STOCK SET E_STOCK=STOCK_NUM WHERE EQUIP_TYPE1=P_EQUIP_TYPE1 AND EQUIP_TYPE2=P_EQUIP_TYPE2;
--UPDATE
ELSE
STOCK_NUM:=P_NUM;
INSERT INTO EQUIPMENT_STOCK(ID,EQUIP_TYPE1,EQUIP_TYPE2,E_STOCK,STATION_ID) 
VALUES(SEQ_EQUIPMENT_STOCK.NEXTVAL,P_EQUIP_TYPE1,P_EQUIP_TYPE2,STOCK_NUM,P_STATION_ID);
--INSERT
END IF;
P_RESULT:=1;
END;

 mybatis调用

Mapper.xml

 

<select id="updateEquipmentStock" parameterType="java.util.Map" statementType="CALLABLE">
		{call UPDATE_EQUIPMENT_STOCK (#{equipType1,mode=IN,jdbcType=INTEGER},
			#{equipType2,mode=IN,jdbcType=INTEGER},
			#{pNum,mode=IN,jdbcType=INTEGER},
			#{stationId,mode=IN,jdbcType=INTEGER},#{p_result,mode=OUT,jdbcType=INTEGER})}
</select>

 Mapper.java

public Integer updateEquipmentStock(Map<String, Object> paramMap);

 Dao

public Integer updateEquipmentStock(Map<String, Object> paramMap) {
		// TODO Auto-generated method stub
		return equipmentStockMapper.updateEquipmentStock(paramMap);
	}

 Service

public Integer updateEquipmentStock(Long equipType1, Long equipType2, Integer pNum,
			Long stationId) {
		Map<String, Object> paramMap = new HashMap<String, Object>();
		paramMap.put("equipType1", equipType1);
		paramMap.put("equipType2", equipType2);
		paramMap.put("pNum", pNum);
		paramMap.put("stationId", stationId);
		paramMap.put("p_result", -1);
		equipmentStockDAO.updateEquipmentStock(paramMap);
		return (Integer)paramMap.get("p_result");
	}

 自己搜索资料编写,可用。

PS:pNum参数使用正负数完成库存的增减

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值