2017-03-24 2 views
1

모르는 수익률을 유지,하지만 난 다음 실행 ... 출력 매개 변수로 0을 받고 을 유지하고있어 :MySQL의 절차는 왜 0

INSERT INTO users (first_name, last_name, email, image, date_of_registration) 
VALUES ("xx", "xx", "xxx", null, sysdate());SELECT LAST_INSERT_ID(); 

내가 좋은 결과를 얻었다 (! = 0) PersistentConnectionstrue으로 설정되어 있다고 가정합니다. 이 문제를 일으킬 수있는 다른 구성은 무엇입니까?

절차

DROP PROCEDURE IF EXISTS partners.create_user; 
CREATE DEFINER=`partnersmaster`@`%` PROCEDURE `create_user`(
    IN p_first_name NVARCHAR(30), 
    IN p_last_name NVARCHAR(30), 
    IN p_email NVARCHAR(100), 
    IN p_image NVARCHAR(200), 
    IN p_date_of_registration TIMESTAMP, 
    OUT p_user_id INT 
) 
BEGIN 
    INSERT INTO users (first_name, last_name, email, image, date_of_registration) 
    VALUES (p_first_name, p_last_name, p_email, p_image, p_date_of_registration); 
    SET @p_user_id = LAST_INSERT_ID(); 
END; 

자바

conn = engine.getDal().getConnection(); 
st = conn.prepareCall("{call partners.create_user(?,?,?,?,?,?)}"); 
st.setString("p_first_name", user.getFirstName()); 
st.setString("p_last_name", user.getLastName()); 
st.setString("p_email", user.getEmail()); 
if(user.getImage() != null) 
    st.setString("p_image", user.getImage()); 
else 
    st.setNull("p_image", Types.NVARCHAR); 
st.setTimestamp("p_date_of_registration", new Timestamp(System.currentTimeMillis())); 
st.registerOutParameter("p_user_id", Types.INTEGER); 
st.execute(); 
userId = st.getInt("p_user_id"); 
+1

당신은 기본적으로 프로 시저를 호출하는 경우도 예상되는 결과를 얻을 수 있습니까? 그리고 자바 내에서 insert를 실행하고 last_insert_id()를 선택하면 예상 결과도 얻게됩니까? – slowy

+0

좋은 지적은 ... –

답변

0
프로 시저 매개 변수 및 세션 변수에 문제가 있습니다

-@p_user_idp_user_id. 귀하의 경우 p_user_id이 설정되지 않았습니다. 이 방법으로

변경 코드 -

BEGIN 
    ... 
    ... 
    ... 
    SET p_user_id = LAST_INSERT_ID(); 
END; 
+0

감사합니다. 둘 사이에 다른 점을 지적 해 주시겠습니까? –

+0

p_user_id는 프로 시저 매개 변수이며 루틴 코드 범위입니다. @p_user_id는 세션 변수이며 스크립트의 어느 부분에서나 액세스 할 수 있으며 연결 범위입니다. – Devart