반응형
ORA-00955 "이름이 이미 기존 개체에서 사용되고 있습니다."
기존 PK를 수정해야 합니다.따라서 삭제하고 다시 작성합니다.
ALTER TABLE B DROP CONSTRAINT PK_B;
ALTER TABLE B ADD CONSTRAINT PK_B PRIMARY KEY ("TYP", "NR", "HH", "QUART");
유감스럽게도 마지막 명세서는 저에게 오류를 줄 것입니다. ORA-00955
원래 다음을 사용하여 정의된 것처럼 PK 제약 조건을 생성하는 경우:
ALTER TABLE B ADD CONSTRAINT PK_B PRIMARY KEY ("TYP", "NR", "HH");
모든 것이 잘 작동합니다.
아마도 있을 것입니다.INDEX
와 관련된.PRIMARY KEY CONSTRAINT
그리고 그것은 또한 이름이 있습니다.PK_B
.
다음과 같이 확인할 수 있습니다.
SELECT * FROM USER_INDEXES WHERE TABLE_NAME='<table_name>';
그렇다면 다음을 수행합니다.
ALTER INDEX "PK_B" RENAME TO "PK_XYZ";
업데이트: 정보ALTER INDEX
진술, 저스틴이 댓글에서 언급한 것처럼 중요한 점은 거의 없습니다.
Oracle은 암묵적으로 다음을 생성합니다.UNIQUE
지원하기 위한 색인PRIMARY KEY CONSTRAINT
인덱스는 기본 키의 이름과 같기 때문에 기본 키가 수정되고 있으므로 이전 기본 키의 정의에 따라 인덱스를 삭제하고 다시 만드는 것이 좋습니다.
내 결론은:
- 기본 키 제약 조건은 고유 인덱스를 통해 적용됩니다.
- Oracle은 고유 또는 고유하지 않은 인덱스를 이미 발견한 경우 기본 키에 사용합니다.
- 인덱스가 처음에 고유하지 않은 인덱스로 작성된 경우에는 고유하지 않은 인덱스로 계속 표시되지만 실제로는 고유한 인덱스가 됩니다.
Arup: Primary Keys Guarantee Unique?에 의한 좋은 시연과 다른 측면에 대한 꽤 상세한 설명. 다시 생각해 보세요.
데이터베이스를 처음부터 다시 작성하는 동안 보기에서 테이블에 대한 참조를 삭제하기 위해 다음과 같은 작업을 수행해야 했습니다.나는 먼저 테이블과 인덱스에서 동일한 것을 검색하고 있었습니다.
connect sys/oracle as sysdba;
select * from all_tables
select * from all_indexes
(finally located the reference in the views)
select * from all_views where view_name like '%WKSTSTATE%';
drop view RUEGEN.WKSTSTATE;
언급URL : https://stackoverflow.com/questions/25993456/ora-00955-name-is-already-used-by-an-existing-object
반응형
'sourcecode' 카테고리의 다른 글
MySQL에서 GROUP_CONCAT에서 1024자 이상을 되돌릴 수 있습니까? (0) | 2023.07.23 |
---|---|
C: 구조물에 대한 포인터 배열에 대한 포인터(할당/할당 취소 문제) (0) | 2023.07.23 |
바이트 배열을 Oracle RAW에서 System으로 변환합니다.가이드? (0) | 2023.07.23 |
스프링의 MockMvc를 저지 리소스와 함께 사용할 수 있습니까? (0) | 2023.07.23 |
이름에 대한 데이터베이스 쿼리에 대한 제안 사항 (0) | 2023.07.23 |