문제

우리의 응용 프로그램은 여러 기본 키가 최종 사용자에게 노출되는 Oracle 10G 데이터베이스를 사용합니다. ProductSodes 등. 불행히도 우리가 통제 할 수없는 수많은 보고서와 맞춤형 스크립트가 있기 때문에 이것으로 무엇이든하는 것이 늦었습니다. 기본 키를 재정의하거나 데이터베이스 구조를 엉망으로 만들 수 없습니다.

이제 일부 고객은 기본 핵심 값 중 일부를 변경하려고합니다. 처음에 P23A1을 호출하고 싶었던 것은 이제 CAT23MOD1이라고 불러야합니다 (실제 예는 아니지만 내 의미를 얻습니다.)

이 작업을 수행하는 쉬운 방법이 있습니까? 나는 다른 테이블과 키에 맞게 매개 변수화 될 수있는 일종의 스크립트를 선호하지만 다른 방법이 없으면 외부 도구가 허용됩니다.

도움이 되었습니까?

해결책

문제는 아마도 PK를 참조하는 외래 키가있을 것입니다. 이 Tom Kyte 기사에 설명 된대로 외국 키를 "처음에는 즉시 지연"으로 정의해야합니다. http://www.oracle.com/technology/oramag/oracle/03-nov/o63asktom.html그것은 당신을 허용합니다 ...

  1. 제약을 연기하십시오
  2. 부모 값을 수정하십시오
  3. 아동 값을 수정하십시오
  4. 변화를 저지르십시오

단순한.

다른 팁

죄송합니다. 약간의 인터넷 검색으로 인해 Oracle은 업데이트 캐스케이드에서 구현하지 않고 삭제 캐스케이드에서만 구현하지 않습니다. 해결 방법을 찾으려면 업데이트 캐스케이드에서 Google Oracle을 찾으십시오. 다음은 링크가 있습니다 캐스케이드 업데이트 테이블 세트 생성 오라클에서.

원래 답변 :

내가 올바르게 이해한다면, 당신은 가치 키 자체의 실제 제약 조건 이름이 아닌 기본 키 열의 데이터.

이것이 사실이라면 영향을받는 1 차 키 제약 조건을 ON UPDATE CASCADE. 이는 기본 키 값을 변경할 때 엔진이 모든 관련 값을 외국 키 테이블로 자동으로 업데이트한다는 것을 의미합니다.

이로 인해 많은 변화가 발생하면 생산 시스템에서 엄청나게 비쌀 수 있습니다.

관련된 테이블을 변경하지 않은 라이브 시스템 에서이 작업을 수행 해야하는 경우, 유일한 옵션은 (변경 해야하는 PK의 각 값에 대해)입니다.

  1. 부모 테이블에 삽입 PK 값이 교체 된 행의 사본을 삽입하십시오.
  2. 각 어린이 테이블에 대해 FK 값을 새 PK 값으로 업데이트하십시오.
  3. 이전 PK 값으로 상위 테이블 행을 삭제합니다.

이름을 바꿀 부모 테이블 목록과 PK 값이 바뀌는 경우이를 수행하는 절차를 작성하기가 어렵지 않아야합니다. user_constraints의 정보를 사용하여 주어진 상위 테이블의 FK 관련 테이블을 가져올 수 있습니다. .

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top