source

ORA-32795: 생성된 always identity 열에 삽입할 수 없습니다.

manysource 2023. 11. 1. 22:27

ORA-32795: 생성된 always identity 열에 삽입할 수 없습니다.

아래 삽입문을 실행하려고 하는데 계속 오류가 발생합니다.

생성된 항상 ID 열에 삽입할 수 없음

다음과 같이 진술합니다.

INSERT INTO leaves_approval 
SELECT * 
FROM   requests_temp r 
WHERE  r.civil_number = 33322 
       AND r.request_id = (SELECT Max(s.request_id) 
                           FROM   requests_temp s)

대상 테이블의 열 중 하나(leaves_approval)에 항상 생성된 것으로 정의된 ID 열이 들어 있습니다.
ID 열은 할당할 수 없는 항상 생성 모드와 할당할 수 있는 기본적으로 생성 모드의 두 가지 모드로 생성할 수 있습니다.


열 모드를 변경한 다음 "그대로" 삽입할 수 있습니다.
ID 열에 중복이 발생하거나 제약 조건으로 인해 실패할 수 있음을 고려하십시오.

ALTER TABLE leaves_approval MODIFY **my_identity_column** GENERATED BY DEFAULT AS IDENTITY;

또는 IDColumn을 INSERT 목록에서 제외할 수도 있습니다(단, IDColumn을 제외하고는 전체 열 목록을 표시해야 합니다). 예를 들어 -

INSERT INTO leaves_approval (c1,c2,c3,c4,...)
SELECT c1,c2,c3,c4 ...
FROM   requests_temp r 
WHERE  r.civil_number = 33322 
       AND r.request_id = (SELECT Max(s.request_id) 
                           FROM   requests_temp s)

데이터베이스 SQL 언어 참조 - CREATE TABLE

항상을 지정하는 경우 오라클 데이터베이스는 항상 시퀀스 생성기를 사용하여 열에 값을 할당합니다.INSERT 또는 UPDATE를 사용하여 열에 값을 명시적으로 할당하려고 하면 오류가 반환됩니다.기본값입니다.

기본적으로 기본적으로 지정하는 경우 오라클 데이터베이스는 시퀀스 생성기를 사용하여 기본적으로 열에 값을 할당하지만 지정된 값을 열에 명시적으로 할당할 수도 있습니다.ON NULL을 지정하면 후속 INSERT 문에서 NULL로 평가되는 값을 할당하려고 할 때 Oracle Database가 시퀀스 생성기를 사용하여 열에 값을 할당합니다.

그 오류에 대해 이해가 안 되는 것은 무엇입니까?값이 시퀀스로 생성되는 "아이덴티티" 열이 있습니다.삽입할 수 없습니다.다른 모든 열을 나열합니다.

INSERT INTO LEAVES_APPROVAL(col1, col2, col3, . . .) 
    SELECT col1, col2, col3, . . .
    FROM REQUESTS_TEMP r
    WHERE r.CIVIL_NUMBER = 33322 AND
          r.REQUEST_ID = (SELECT MAX(s.REQUEST_ID) FROM REQUESTS_TEMP s);

일반적으로, 모든 열을 다음과 같이 나열하는 것이 좋습니다.INSERT어쨌든.이렇게 하면 열 순서가 잘못되었거나 테이블의 열 개수가 다르기 때문에 예기치 않은 오류를 방지할 수 있습니다.

예: my_table_column NUMBER GENERED BY DEFAULT ON NUMBER AS IDENTY - 로 정의된 열이 있으면 NULL일 때 값을 얻고 해당 열에 대한 값을 삽입/업데이트해도 간섭하지 않습니다.그것은 나에게 효과가 있었다.

언급URL : https://stackoverflow.com/questions/41275920/ora-32795-cannot-insert-into-a-generated-always-identity-column