3 개의 IN 매개 변수와 6 개의 OUT 매개 변수로 MySql 저장 프로 시저를 호출해야하는 경우가 있습니다. 내가의 레코드를 검색 할 수 있어요 여기java.sql.SQLException : 9의 매개 변수 인덱스가 범위를 벗어났습니다. (1, 8)
DELIMITER $$
DROP PROCEDURE IF EXISTS GET_PRODUCT_INFO $$
CREATE PROCEDURE GET_PRODUCT_INFO(IN productName varchar(25),
IN divisionID int(11), IN productQuantity int(11),
OUT Price double, OUT price_without_vat double,
OUT vat double, OUT Quantity int, OUT ProductsId int, OUT ExpDate date)
BEGIN
select I.quantity into Quantity from ProductInventory I
where I.pname=productName and I.divid=divisionID ;
if Quantity > productQuantity THEN
select P.productID,P.price,P.price_without_vat,P.vat, I.quantity,P.ExpiryDate
into ProductsId,Price,price_without_vat,vat,Quantity,ExpDate
from product P,ProductInventory I
where P.pname=productName and I.pname=productName
and P.orgid=divisionID and I.divid=divisionID ;
update productinventory
set quantity=(quantity-productQuantity)
where pname=productName and divID=divisionID;
END IF;
END $$
call GET_PRODUCT_INFO('Crocin',1,2,@Price,@price_without_vat,@vat,@Quantity,@ProductsId,@ExpiryDate)$$
절차 mysql을 cmd를 프롬프트 ... 는하지만 내 JDBC 코드에서 프로 시저를 호출하려고 할 때마다이 오류
을 얻고있다EXCEPTION
java.sql.SQLException의 : (9)의 파라미터 인덱스 (1, 8)의 범위 밖이다com.mysql.jdbc.CallableStatement.checkIsOutputParam에서 com.mysql.jdbc.CallableStatement.checkParameterIndexBounds (CallableStatement.java:1002) 에서 0 (CallableStatement.java:971)
callableStatement = (CallableStatement)con.prepareCall("{call GET_PRODUCT_INFO(?,?,?,?,?,?,?,?,?)}");
callableStatement.setInt(2, 1);
callableStatement.setInt(3, quantity);
callableStatement.registerOutParameter(4, Types.DOUBLE);
callableStatement.registerOutParameter(5, Types.DOUBLE);
callableStatement.registerOutParameter(6, Types.DOUBLE);
callableStatement.registerOutParameter(7, Types.INTEGER);
callableStatement.registerOutParameter(8, Types.INTEGER);
callableStatement.registerOutParameter(9, Types.DATE);--->Exception here
가독성을 높이기 위해 코드 포맷 블록에 프로 시저 코드를 입력하십시오 ... –
분명히 잘못된 것을 볼 수 없습니다. 확실히하기 위해서, 이것은 실제 코드의 cut'n'paste이지 "나는 질문과 비슷한 코드를 작성할 것"이 아닙니다. :) –