----存儲過程 INSERT_MAT_ID_PROCEDURE實例
create or replace procedure INSERT_MAT_ID_procedure (IN_PRD_PLAN_ID IN VARCHAR2,IN_MAT_ID IN VARCHAR2 ,results out varchar2)
IS
v_str FLOAT;
v_count number(10);
v_results VARCHAR2(2000);
v_order_num VARCHAR2(20);
v_ORDER_ITEM_NUM VARCHAR2(20) default '-1';
CURSOR ORDER_ITEM_NUM(v_PRD_PLAN_ID VARCHAR2)
IS
SELECT ORDER_ITEM_NUM
FROM SC_ORDER_PLAN
WHERE PRD_PLAN_ID = v_PRD_PLAN_ID;
CURSOR SC_PLAN_DETAIL_standard(v_IN_MAT_ID VARCHAR2)
IS
SELECT PRD_STANDARD
FROM SC_PLAN_DETAIL SPD
WHERE SPD.MAT_ID = (SELECT SP.PRD_PLAN_PRODUCTION_PRD_ID
FROM SC_PRD SP
WHERE SP.PRD_ID = v_IN_MAT_ID);
BEGIN
--把投料的材料號插入SC_ORDER裏
IF UPPER(SUBSTR(IN_MAT_ID,1,2))!=UPPER('KC') THEN
BEGIN
SELECT count(distinct PRD_STANDARD) into v_count FROM SC_ORDER WHERE ORDER_PK=IN_MAT_ID;
EXCEPTION
WHEN NO_DATA_FOUND THEN
v_count := 0;
END;
IF v_count=0 THEN
SELECT distinct order_num
INTO v_order_num
FROM SC_ORDER_PLAN
WHERE PRD_PLAN_ID = IN_PRD_PLAN_ID;
FOR v_SC_prd_standard IN SC_PLAN_DETAIL_standard(IN_MAT_ID) LOOP
begin
SELECT ORDER_ITEM_NUM
INTO v_ORDER_ITEM_NUM
FROM SC_order
WHERE order_num = v_order_num
AND prd_standard = v_SC_prd_standard.PRD_STANDARD
AND (order_pk IS NULL or order_pk='')
AND ROWNUM = 1;
EXCEPTION
WHEN NO_DATA_FOUND THEN
v_ORDER_ITEM_NUM := '-1';
END;
if v_ORDER_ITEM_NUM !='-1' then
update sc_order set order_pk=IN_MAT_ID
where ORDER_ITEM_NUM=v_ORDER_ITEM_NUM;
results:='OK';
end if;
END LOOP;
else
results:='NO';
END IF;
else
results:='NO';
end IF;
END INSERT_MAT_ID_procedure;
----mybatis調用orcle存儲過程,參數類型是map
<select id="queryTableNum" statementType="CALLABLE" parameterType="java.util.Map">
{call INSERT_MAT_ID_PROCEDURE(#{inPrdPlanId,mode=IN,jdbcType=VARCHAR},#{inMatId,mode=IN,jdbcType=VARCHAR},#{results,mode=OUT,jdbcType=VARCHAR})}
</select>
---Mybatis調用存儲過程並獲取out參數
mapper調用存儲過程
<select id="updateName" statementType="CALLABLE" parameterType="java.util.Map" resultType="java.util.Map">
call UPDATE_PRO_NAME(#{oldName,mode=IN,jdbcType=VARCHAR},
#{newName,mode=IN,jdbcType=VARCHAR},
#{results,mode=OUT,jdbcType=VARCHAR})
</select>
service層傳參並獲取out參數
//測試調用存儲過程
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("oldName","張三");
map.put("newName","李四");
map.put("results","");//out參數,傳一個空串
//這裏如果再用一個map來接收返回值,返回值會是null,直接調用就行了,過程會將out參數輸出到傳入的map參數裏
firstProductMapper.updateName(map);
String restrString = (String) map.get("results");