programing

Oracle SQL - 테이블에 기본 키 추가

linuxpc 2023. 7. 30. 17:25
반응형

Oracle SQL - 테이블에 기본 키 추가

기본 키가 없는 열이 몇 개 있는데 기본 키 열을 추가하려고 합니다.

NAME    Age
-------------
Peter   45
Bob     25
John    56
Peter   45

일부 수집가들은 시퀀스와 트리거가 있는 PK를 추가할 것을 제안합니다.Oracle의 기존 테이블에 자동 증분 기본 키 추가

이것은 좋지만, 고객은 시퀀스나 트리거를 추가할 권한이 없는 데이터베이스 사용자를 사용합니다.사용자 권한을 변경하거나 스크립트를 실행하기 위해 수십 명의 DBA 관리자에게 연락하는 것을 방지하고 싶습니다.

이것은 업데이트 문만 포함된 PK를 추가하는 것에 대한 저의 제안입니다. (2단계에서 도움이 필요합니다.)

1단계: ID 열을 만듭니다(이에 대한 DB 권한이 있습니다).

ALTER TABLE PERSON ADD ID NUMBER(10,0);

2단계: 질문: 행 순서 등에 따라 고유한 값으로 ID 열을 초기화할 수 있습니까? 어떻게 해야 합니까?

UPDATE PERSON SET ID = something-unique

3단계: 단어 뒤에 기본 키 제약 조건 추가: (IDB는 이에 대한 권한을 가집니다)

ALTER TABLE PERSON ADD CONSTRAINT PK_ID PRIMARY KEY(ID);

4단계: Afterwords: 기본 키는 내 응용 프로그램에 의해 관리되고 추가됩니다.

결과는 다음과 같습니다.

ID(PK)  NAME    Age
---------------------
1       Peter   45
2       Bob     25
3       John    56
4       Peter   45

여러분 감사합니다!

Update person set id = rownum;

이 아이디어는 매우 유치하지만 테이블에 행 수가 많지 않으면 잘 작동합니다.

2단계의 경우 다음과 같이 for 루프를 실행합니다.

declare
    i pls_integer :=1;
     begin
    for rec in (select name,age, rowid from table_name)
    loop
    update table_name set id = i 
    where 
     table_name.name=rec.name 
     and table_name.age=rec.age 
     and table_name.rowid = rec.rowid;
    i:=i+1;
    end loop;
end;

언급URL : https://stackoverflow.com/questions/19807314/oracle-sql-add-primary-key-to-table

반응형