자바에서 프로시저 호출이 안됩니다. 0 1 1,692

by 안녕하심쇼 [PL/SQL] 프로시저 트리거 [2014.06.19 12:52:15]


create or replace PROCEDURE PROCEDURE_RELEASE_PRODUCT
       (P_FC_CODE IN NUMBER, P_RELEASE_DATE IN VARCHAR2) 
 IS
        V_RELEASE_NO	RELEASE.RELEASE_NUMBER%TYPE;
        V_PD_CODE	FRANCHISE_STOCK.PD_CODE%TYPE;
	V_AMOUNT	FRANCHISE_STOCK.C_AMOUNT%TYPE;

      CURSOR C1 IS
	   SELECT PD_CODE,  (P_AMOUNT - C_AMOUNT) 
	     FROM FRANCHISE_STOCK
	    WHERE FC_CODE = P_FC_CODE
	      AND P_AMOUNT <> C_AMOUNT;

    BEGIN
      SELECT RELEASE_NUMBER
        INTO V_RELEASE_NO
        FROM RELEASE
       WHERE FC_CODE = P_FC_CODE
         AND RELEASE_DATE = TO_DATE(P_RELEASE_DATE,'YYYYMMDD');

        OPEN C1;
        LOOP
            FETCH C1 INTO V_PD_CODE, V_AMOUNT;
            EXIT WHEN C1%NOTFOUND;

                INSERT INTO RELEASE_PRODUCT (
                        RP_NUMBER
                       ,PD_CODE
                       ,AMOUNT
                       ,RELEASE_NUMBER
                      ) 
                VALUES (
                        SEQ_RP_NUMBER.NEXTVAL
                       ,V_PD_CODE
                       ,V_AMOUNT
                       ,V_RELEASE_NO
                );	    
        END LOOP;
        COMMIT;
        CLOSE C1;
        EXCEPTION 
                 WHEN OTHERS THEN 
                 ROLLBACK;
                 DBMS_OUTPUT.PUT_LINE(SQLERRM||'에러 발생 '); 

END PROCEDURE_RELEASE_PRODUCT;

여기까지가 프로시저구요.

이 밑에서는 저 프로시저를 호출하는 자바에서의 메소드입니다.

자바에서 실행했을 때, 오류메세지가 뜨지않습니다. 

디비에서 직접 이 프로시저를 호출하면 값이 잘들어가는데... 자바에서 호출해서 쓰니깐 안되네요. 무슨문제일까요 ㅜㅜ

@Override
	public int releaseProductProcedure( Connection conn, int fc_code, String date)
			throws SQLException, ClassNotFoundException {

		ResultSet rs = null;
		CallableStatement cstmt = null;

		System.out.println("releaseProductProcedure > fc_code :  " + fc_code);
		try {
			String sql = "{call PROCEDURE_RELEASE_PRODUCT(?, ?) }";

			cstmt = conn.prepareCall(sql);
	       
			cstmt.setInt(1,fc_code);
			cstmt.setString(2, date);
			rs = cstmt.executeQuery();
	
		} finally {
			JdbcUtil.close(rs);
			JdbcUtil.close(cstmt);
		}	
		return 0;
	}

 

by 비주류 [2014.06.19 13:10:16]

Exception catch 없이 finally 처리하여 예외가 걸러지지 않을 것 같습니다.

우선 catch 문 추가하셔서 적절히 예외 처리하시고 로그를 확인하시는 것이 좋겠네요.

아니면, rs = executeQuery 대신에 execute 나 executeUpdate 한번 해보세요.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입