sequence로 증가값 사용에 대해 질문 드립니다. 0 3 9,513

by oraC [SQL Query] oracle sequence [2010.10.25 12:43:33]



안녕하세요~ 오라클 처음 써보는데요..

그것도 남이 만든거 디버깅&수정 작업 중이라 맨땅에 헤딩하고 있습니다..ㅠㅠ

지금 한가지 문제를 해결 못하고 있는게..

먼저 쿼리를 보시면
1번 보고서 데이터 생성 쿼리
INSERT INTO [보고서 테이블](REPORT_ID, 그 외 컬럼들..)
    VALUES(TN_REPORT_SUPPORT_MNG_SEQ.NEXTVAL, 그 외 값들..)

REPORT_ID는 PK 이고요

이 테이블에 대한 Sequence는 다음과 같이 생성 했습니다.

DROP SEQUENCE UPISUW2.TN_REPORT_SUPPORT_MNG_SEQ;

CREATE SEQUENCE UPISUW2.TN_REPORT_SUPPORT_MNG_SEQ
  START WITH 1
  MAXVALUE 999999999999999999999999999
  MINVALUE 1
  NOCYCLE
  CACHE 20
  NOODER;

2번 보고서 내의 페이지 데이터 생성 쿼리
INSERT INTO [보고서 페이지 테이블](REPORT_PAGE_ID, REPORT_ID, 그 외 컬럼들..)
    VALUES(:REPORT_PAGE_ID, TN_REPORT_SUPPORT_MNG_SEQ.CURRVAL, 그 외 컬럼들)

PEPORT_PAGE_ID와 REPORT_ID가 PK 이면서 REPORT_ID는 FK로 되어 있습니다.

프로그램 설명을 드리자면..

저장 버튼을 클릭 하면 먼저 1번 쿼리로 보고서를 생성 하고요..

보고서 내에 사용자가 생성한 페이지 수만큼 loop를 돌아 2번 쿼리를 페이지 마다 한번씩 실행 해서 페이지를 데이터를 생성 합니다.

근데 2페이지를 INSERT 할 때 REPORT_PAGE_ID는 제대로 2번이 들어가는데 다음과 같은 오류가 발생 됩니다.
'ORA-00001: 무결성 제약 조건(UPISUW2.IDX_TN_REPORT_SUPPORT_PAGES_FK)에 위배됩니다'

이 상태에서 데이터를 조회 해보면 보고서 테이블에 한건, 보고서 페이지 테이블에 한건 씩 데이터가 들어 가 있고요

이 상태에서 같은 동작을 한번 더 수행 하면 이번엔 다음과 같은 오류가 발생 합니다.

'ORA-00001: 무결성 제약 조건(UPISUW2.IDX_TN_REPORT_SUPPORT_PAGES_PK)에 위배됩니다'

이 때는 데이터를 조회 해보면 보고서 데이터만 INSERT 되고 보고서 페이지 데이블에는 아무것도 들어가지 않습니다.

MS-SQL 사용할 때는 그냥 PK에 identity만 지정 하고 저런 구조에서 두개의 PK값이 둘다 중복 되지만 않게 해주면 아무 문제 없었는데..

제가 뭔가 설정을 잘 못 한건지 해결책이 잘 찾아지지가 않네요..

답변 부탁드리겠습니다.

by 빈이 [2010.10.25 14:46:37]
2개 페이지를 가지고 있는 보고서라고 가정했을때

잘 보시면 처음에 1번 쿼리가 실행된다면 SEQ(TN_REPORT_SUPPORT_MNG_SEQ)는 1입니다.
보고서 테이블
INSERT INTO [보고서 테이블](REPORT_ID, 그 외 컬럼들..)
VALUES(1, 그 외 값들..)


보고서 페이지 테이블
INSERT INTO [보고서 페이지 테이블](REPORT_PAGE_ID, REPORT_ID, 그 외 컬럼들..)
VALUES(:REPORT_PAGE_ID, 2, 그 외 컬럼들)
INSERT INTO [보고서 페이지 테이블](REPORT_PAGE_ID, REPORT_ID, 그 외 컬럼들..)
VALUES(:REPORT_PAGE_ID, 3, 그 외 컬럼들)


보고서 테이블에는 1번만 들어가 있는 상황에서

보고서 페이지 테이블의 FK에는 2, 3 번이 들어가니 FK 에러가 나겠죠.



:REPROT_PAGE_ID에 시퀀스를 넣으시고
REPROT_ID는 보고서 테이블에서 입력한값과 똑같은 값을 보고서 페이지 테이블에 넣어주셔야겠죠

by oraC [2010.10.25 15:44:49]
어흑.. ㅜㅜ 감사합니다 도움 주신 덕분에 잘 해결 됐어요

by 빈이 [2010.10.25 15:46:54]
^^ 부족한 제가 도움이 되었다니 저도 기분 좋네요~
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입