2009-12-04 2 views
0

우리 애플리케이션은 몇 가지 기본 키가 최종 사용자에게 노출되는 Oracle 10g 데이터베이스를 사용합니다. 제품 코드 등. 불행히도이 작업을 수행하는 데는 늦었습니다. 거기에는 수 많은 보고서와 사용자 지정 스크립트가 있으므로 제어 할 수 없습니다. 기본 키를 재정의하거나 데이터베이스 구조를 엉망으로 만들 수 없습니다.Oracle에서 기본 키 값을 어떻게 바꿉니 까?

이제 일부 고객은 기본 키 값 중 일부를 변경하려고합니다. 그들이 처음에 P23A1을 호출하기를 원하는 것은 CAT23MOD1이라고 불려야합니다 (실제 예제가 아니라 내 의미를가집니다).

쉬운 방법이 있습니까? 필자는 다른 테이블과 키에 맞게 매개 변수화 할 수있는 스크립트를 선호하지만 다른 방법이 없다면 외부 도구를 사용할 수 있습니다.

답변

3

아마도 PK를 참조하는 외래 키가 문제 일 수 있습니다. 다음을 수행 할 수 있습니다 http://www.oracle.com/technology/oramag/oracle/03-nov/o63asktom.html ...

  1. 연기 제약을
  2. 을 수정
  3. 부모 값을 수정 :이 톰 카이트 문서에 설명 된대로, "처음에는 즉시 연기"등의 외부 키를 정의해야합니다 아이는
  4. 이 변화를

간단한 커밋 값.

0

약간의 인터넷 검색 결과에 따르면 오라클은 ON UPDATE CASCADE를 구현하지 않고, CASCADE 만 삭제한다고 설명합니다. Google 오라클의 업데이트 캐스케이드 해결 방법을 찾으려면. 오라클의 Creating A Cascade Update Set of Tables에 대한 링크가 있습니다.

원래 답 :

만약 내가 제대로 이해하고

, 당신은 값을 기본 키 열 데이터의를 변경하려면, 키 자체가 아니라 실제 제약 조건 이름.

이것이 사실이라면 영향을받는 기본 키 제약 조건을 참조하는 모든 외래 키를 ON UPDATE CASCADE으로 다시 정의하는 것이 가장 쉽게 수행 할 수 있습니다. 즉, 기본 키 값을 변경하면 엔진이 외래 키 테이블의 모든 관련 값을 자동으로 업데이트합니다.

변경 사항이 많은 경우 프로덕션 시스템에서 엄청나게 비쌉니다. 당신이 포함 된 테이블없이 DDL 변경과 라이브 시스템에서이 작업을 수행해야하는 경우

+0

IME, 우리는 제약 조건을 해제하고 표 단위로 업데이트했습니다. 지루한 ... –

+0

질문에서 제약 조건을 해제 할 수있는 위치에 있지 않다고 가정합니다. 최종 사용자가 일회성 작업이 아닌 지속적으로이 기능을 원합니다. PK 테이블을 업데이트 할 때 꽤 못생긴 방아쇠를 쓰는 것 외에는 어떤 옵션도 보이지 않습니다. –

+0

@Larry : 예, 변경해야하는 값입니다. @OMG : 예, 매우 지루한 :-(당신은 그것을 할 재미있는 방법이 있습니까?) : –

0

, 그럼 난 당신의 유일한 옵션으로 생각 (변경해야하는 PK의 각 값에 대해) :

    부모 테이블에
  1. 삽입은 PK 값이있는 행의 사본은 새 PK 값
  2. 이전 PK 값
과 부모 테이블 행을 삭제하려면 FK 값을 업데이트, 각 자식 테이블에 대해
  • 교체

    부모 테이블 목록과 이름을 바꿀 PK 값이있는 경우 USER_CONSTRAINTS의 정보를 사용하여 주어진 부모에 대한 FK 관련 테이블을 가져올 수 있습니다. 표.

  • 관련 문제