아래와 같은 프로시저입니다. ORA-00001 : 무결성 제약 조건(MELIMS.PK_DRAFT) 위배가 나오는데요.
시퀀스값을 불러오면서 자꾸 에러가 납니다. 아래쪽 빨간 부분으로 체크한 부분인데요.
이런거 해결 방법은 없나요?
디비 툴은 Oracle_SQL_Developer 입니다.
질문1: 프로시저가 잘 돌아가고 있는지 이클립스 디버그처럼 디버깅 할수 있는 방법이 없는지요?
질문2 프로시저 돌면서 변수 값에 뭐가 들어갔는지 값을 볼수 있는 방법이 없는지요?
질문3 프로시저나 오라클 쿼리가 돌고나면 Oracle_SQL_Developer 안에서나 어딘가에서 log 파일을 남길 수 있는지요? 방법이 있다면 조언 좀 부탁드립니다.
V_DML VARCHAR2,
V_INPARAMS VARCHAR2,
V_ELSEINFO VARCHAR2,
V_USER_ID VARCHAR2,
V_OUTPUT1 OUT VARCHAR2, -- 카운트
V_OUTPUT2 OUT VARCHAR2, -- 반환값
V_OUTPUT3 OUT VARCHAR2 -- 에러메시지
)
IS
CNT NUMBER(10);
CODE NUMBER(10);
PROC CHAR(8);
SPLIT_INFO_CNT NUMBER(10); -- V_ELSEINFO 카운트
SIGN_MAN_CNT NUMBER(10); -- 기안자 수
SPLIT_INFO VARCHAR2(2000);
SPLIT_PARAMS VARCHAR2(2000);
REQUESTNO_ CHAR(12);
BEGIN
IF (V_DML = '기안') THEN
BEGIN
INSERT INTO DRAFT(DRAFT_CODE, DRAFT_TITLE, DRAFT_MAN, DRAFT_DAY, DRAFT_MAN_COMMENT, DRAFT_PROCESS, SYSMUSER, SYSMDATE)
VALUES (
SEQ_DRAFT.NEXTVAL,
SF_SPLITDATA(V_ELSEINFO, '|', 1),
SF_SPLITDATA(V_ELSEINFO, '|', 2),
SYSDATE,
SF_SPLITDATA(V_ELSEINFO, '|', 3),
SF_SPLITDATA(V_ELSEINFO, '|', 4),
V_USER_ID,
SYSDATE
);
CODE := SEQ_DRAFT.CURRVAL;
SPLIT_INFO_CNT := 0;
CNT := SF_SPLITDATA(V_ELSEINFO, '|', 0);
WHILE SPLIT_INFO_CNT < CNT LOOP
BEGIN
SPLIT_INFO := SF_SPLITDATA(V_INPARAMS, '[\T]', SPLIT_INFO_CNT);
INSERT INTO DRAFT_FLOW(DRAFT_CODE, SEQ, SIGN_ID, SIGN_DAY, STATUS, SYSMUSER, SYSMDATE)
VALUES(
CODE,
SPLIT_INFO_CNT + 1,
SF_SPLITDATA(SPLIT_INFO, '|', 0),
SYSDATE,
SF_SPLITDATA(SPLIT_INFO, '|', 1),
V_USER_ID,
SYSDATE
) ;
SPLIT_INFO_CNT := SPLIT_INFO_CNT + 1;
END;
|