O_RESULT := 'FAIL';
IF I_NC = 'N' THEN
MERGE INTO GRAD.GNONM_HIS
USING (SELECT * FROM DUAL)
ON (GNHIS_HAKBUN = I_HAKBUN
AND GNHIS_GUBUN = I_GUBUN
AND GNHIS_SEQ = I_SEQ)
WHEN MATCHED THEN
UPDATE SET GNHIS_YY = I_YY
, GNHIS_HAKGI = I_HAKGI
, GNHIS_YEAR = I_YEAR
, GNHIS_TITLE = I_TITLE
, GNHIS_JIDO_GUBUN = I_JIDO_GUBUN
, GNHIS_SABUN1 = I_SABUN1
, GNHIS_JIKWI1 = I_JIKWI1
, GNHIS_NAME1 = I_NAME1
, GNHIS_SABUN2 = I_SABUN2
, GNHIS_JIKWI2 = I_JIKWI2
, GNHIS_NAME2 = I_NAME2
, GNHIS_MOD_ILJA = TO_CHAR(SYSDATE, 'YYYYMMDD')
, GNHIS_DATE = SYSDATE
, GNHIS_UID = I_IDNO
WHEN NOT MATCHED THEN
INSERT (GNHIS_YY
, GNHIS_HAKGI
, GNHIS_HAKBUN
, GNHIS_YEAR
, GNHIS_SEQ
, GNHIS_GUBUN
, GNHIS_TITLE
, GNHIS_JIDO_GUBUN
, GNHIS_SABUN1
, GNHIS_JIKWI1
, GNHIS_NAME1
, GNHIS_SABUN2
, GNHIS_JIKWI2
, GNHIS_NAME2
, GNHIS_MOD_ILJA
, GNHIS_MOD_REASON
, GNHIS_GBN
, GNHIS_DATE
, GNHIS_UID
, GNHIS_APP_DATE
, GNHIS_APP_ID)
VALUES (I_YY
, I_HAKGI
, I_HAKBUN
, I_YEAR
, A_SEQ
, I_GUBUN
, I_TITLE
, I_JIDO_GUBUN
, I_SABUN1
, I_JIKWI1
, I_NAME1
, I_SABUN2
, I_JIKWI2
, I_NAME2
, TO_CHAR(SYSDATE, 'YYYYMMDD')
, I_REASON
, 'J'
, SYSDATE
, I_IDNO
, SYSDATE
, I_IDNO);
--** 논문관리 히스토리에 데이터가 정상적으로 들어갔을 경우
IF SQL%ROWCOUNT = 1 THEN
MERGE INTO GRAD.GNONM_CONT
USING (SELECT * FROM DUAL)
ON (GNCON_HAKBUN = I_HAKBUN
AND GNCON_SEQ = I_SEQ)
WHEN NOT MATCHED THEN
INSERT (GNCON_HAKBUN
, GNCON_SEQ)
VALUES (I_HAKBUN
, A_SEQ);
--** 논문관리 히스토리에는 데이터가 들어갔지만, 논문관리세부에는 데이터가 들어가지 않았을 경우 ROLLBACK
IF SQL%ROWCOUNT = 1 THEN
O_RESULT := 'SUCCESS';
ELSE
O_RESULT := 'FAIL';
END IF;
ELSE
O_RESULT := 'FAIL';
RETURN;
END IF;
END IF;
------------------------------------------------------------------
현재 소스가 이러합니다.
모든 작업이 성공일땐 SUCCESS 값이 반환되는데
실패할 경우엔 FAIL 값이 아닌 널 값이 반환됩니다.
어떠한 문제인지 답변 해주시면 감사하겠습니다.
제일 첫줄에 이미 값을 넣고 시작하고, 값을 비우는 로직은 보이지 않고 있습니다.
제일 첫줄 이전에 이미 에러가 났거나
올려주신 소스 이외의 안올려 주신 부분에서 문제가 발생한 건 아닌지?
PROCEDURE P_GNHIS_INSERT_NEW
(
I_HAKBUN IN VARCHAR2 --** 학번
, I_YY IN VARCHAR2 --** 연도
, I_HAKGI IN VARCHAR2 --** 학기
, I_TITLE IN VARCHAR2 --** 논문제목
, I_YEAR IN VARCHAR2 --** 기수
, I_JIDO_GUBUN IN VARCHAR2 --** 논문지도구분
, I_SABUN1 IN VARCHAR2 --** 지도교수 사번
, I_JIKWI1 IN VARCHAR2 --** 지도교수 직위
, I_NAME1 IN VARCHAR2 --** 지도교수 성명
, I_SABUN2 IN VARCHAR2 --** 지도교수 사번(합동)
, I_JIKWI2 IN VARCHAR2 --** 지도교수 직위(합동)
, I_NAME2 IN VARCHAR2 --** 지도교수 성명(합동)
, I_REASON IN VARCHAR2 --** 변동 및 취소 사유
, I_GUBUN IN VARCHAR2 --** 논문 구분
, I_IDNO IN VARCHAR2 --** 로그인 아이디
, I_SEQ IN NUMBER --** 순번
, I_NC IN VARCHAR2 --** 신규작성 OR 변경신청 여부
, O_RESULT OUT VARCHAR2 --** 결과값
)
IS
A_SEQ NUMBER := 0;
BEGIN
O_RESULT := 'FAIL';
--** 순번 구하기
FOR A1 IN (SELECT NVL(MAX(GNHIS_SEQ), 0) AS MAX_SEQ
FROM GNONM_HIS
WHERE GNHIS_HAKBUN = I_HAKBUN)
LOOP
A_SEQ := A1.MAX_SEQ + 1;
END LOOP;
--** 지도교수선정
IF I_GUBUN = '1' THEN
--** 논문지도교수 신청서(신규작성)
IF I_NC = 'N' THEN
MERGE INTO GRAD.GNONM_HIS
USING (SELECT * FROM DUAL)
ON (GNHIS_HAKBUN = I_HAKBUN
AND GNHIS_GUBUN = I_GUBUN
AND GNHIS_SEQ = I_SEQ)
WHEN MATCHED THEN
UPDATE SET GNHIS_YY = I_YY
, GNHIS_HAKGI = I_HAKGI
, GNHIS_YEAR = I_YEAR
, GNHIS_TITLE = I_TITLE
, GNHIS_JIDO_GUBUN = I_JIDO_GUBUN
, GNHIS_SABUN1 = I_SABUN1
, GNHIS_JIKWI1 = I_JIKWI1
, GNHIS_NAME1 = I_NAME1
, GNHIS_SABUN2 = I_SABUN2
, GNHIS_JIKWI2 = I_JIKWI2
, GNHIS_NAME2 = I_NAME2
, GNHIS_MOD_ILJA = TO_CHAR(SYSDATE, 'YYYYMMDD')
, GNHIS_DATE = SYSDATE
, GNHIS_UID = I_IDNO
WHEN NOT MATCHED THEN
INSERT (GNHIS_YY
, GNHIS_HAKGI
, GNHIS_HAKBUN
, GNHIS_YEAR
, GNHIS_SEQ
, GNHIS_GUBUN
, GNHIS_TITLE
, GNHIS_JIDO_GUBUN
, GNHIS_SABUN1
, GNHIS_JIKWI1
, GNHIS_NAME1
, GNHIS_SABUN2
, GNHIS_JIKWI2
, GNHIS_NAME2
, GNHIS_MOD_ILJA
, GNHIS_MOD_REASON
, GNHIS_GBN
, GNHIS_DATE
, GNHIS_UID
, GNHIS_APP_DATE
, GNHIS_APP_ID)
VALUES (I_YY
, I_HAKGI
, I_HAKBUN
, I_YEAR
, A_SEQ
, I_GUBUN
, I_TITLE
, I_JIDO_GUBUN
, I_SABUN1
, I_JIKWI1
, I_NAME1
, I_SABUN2
, I_JIKWI2
, I_NAME2
, TO_CHAR(SYSDATE, 'YYYYMMDD')
, I_REASON
, 'J'
, SYSDATE
, I_IDNO
, SYSDATE
, I_IDNO);
--** 논문관리 히스토리에 데이터가 정상적으로 들어갔을 경우
IF SQL%ROWCOUNT = 1 THEN
MERGE INTO GRAD.GNONM_CONT
USING (SELECT * FROM DUAL)
ON (GNCON_HAKBUN = I_HAKBUN
AND GNCON_SEQ = I_SEQ)
WHEN NOT MATCHED THEN
INSERT (GNCON_HAKBUN
, GNCON_SEQ)
VALUES (I_HAKBUN
, A_SEQ);
--** 논문관리 히스토리에는 데이터가 들어갔지만, 논문관리세부에는 데이터가 들어가지 않았을 경우 ROLLBACK
IF SQL%ROWCOUNT = 1 THEN
O_RESULT := 'SUCCESS';
ELSE
O_RESULT := 'FAIL';
END IF;
ELSE
O_RESULT := 'FAIL';
RETURN;
END IF;
END IF;
END IF;
END;
end;
/
현재 모든 소스입니다.
첫 줄에 데이터를 넣었으면 데이터가 들어간 경우 SUCCESS도 반환되면 안되지 않나요?? SUCCESS는 반환되지만, 의도적으로 오류를 유발시켜 FAIL값을 반환 되는지 확인하려고 했는데 'FAIL'이 아닌 ' ' 공백, 널값이 반환됩니다!
처음에 변수에 값을 'FAIL' 로 넣었지만
중간에 'SUCCESS' 로 바꾸는 부분이 있으니 값은 바뀔 수 있습니다.
다만 공백으로 값을 바꾸는 부분이 없으니 공백이 반환된 것이 아니라
아예 값을 반환받지 못한 것으로 생각됩니다.
즉, 중간에 에러가 발생한 것이 아닐까요?
에러메시지가 없는지요?