programing

SQL 삽입 문 반환 "0/무개 행 삽입"

iphone6s 2023. 9. 19. 20:54
반응형

SQL 삽입 문 반환 "0/무개 행 삽입"

나는 글을 씁니다.INSERTPL/SQL 블록의 테이블에 하나의 행을 삽입하는 문장.이 삽입이 실패하거나 행이 삽입되지 않으면 이전에 실행한 업데이트 문을 롤백해야 합니다.

나는 어떤 상황에서 그들이INSERT문장에 0개의 행을 삽입할 수 있습니다.어떤 예외로 인해 삽입이 실패할 경우 예외 블록에서 처리할 수 있습니다.다음과 같은 경우가 있습니까?INSERT성공적으로 실행될 수도 있지만 다음을 확인해야 하는 예외가 발생하지는 않습니다.SQL%ROWCOUNT < 1?

당신의INSERT문장이 구조화되어 있습니다.INSERT ... VALUES, 그러면 정확히 하나의 행을 성공적으로 삽입하거나 예외를 생성합니다.확인할 필요가 없을 것입니다.SQL%ROWCOUNT.

당신의INSERT문장이 구조화되어 있습니다.INSERT ... SELECT, 그러면 가능합니다.SELECT문장은 0 행을 반환합니다.INSERTstatement는 0개의 행을 삽입하고 예외는 던지지 않습니다.만약 당신이 그것을 오류라고 생각한다면, 당신은 확인할 필요가 있을 것입니다.SQL%ROWCOUNT후에INSERT문이 실행됩니다.

예, DML 문(INSERT, UPDATES 등)의 영향을 받는 행 수를 확인하려면 다음 값을 확인할 수 있습니다.SQL%ROWCOUNT

INSERT INTO TABLE
SELECT col1, col2,....
  FROM TAB;

if SQL%ROWCOUNT=0 then
   RAISE_APPLICATION_ERROR(-20101, 'No records inserted');
end if;

위의 설명 중 하나를 완료하는 방법:

  • 요청하시는 경우에는INSERT INTO ... VALUES힌트가 없는 DML 문, 실제로 시스템은 성공 시 생성된 1개의 행을 반환하거나 실패 시 ORA 오류를 반환합니다.

  • 그러나 당신이 요구한다면INSERT INTO ... VALUES힌트가 있는 DML 문: IGNORGE_ROW_ON_DUPE_KEY, 행이 이미 존재할 경우 1개의 행이 생성되거나 0개의 행이 생성되고 다른 장애가 발생할 경우 ORA 오류가 생성됩니다.

  • 당신이 요청하는 경우에는INSERT ... SELECTJustin이 위에서 언급한 바와 같이 SELECT에 대한 내부 호출이 실제로 반환될 수 있으므로 0개의 행이 생성될 것으로 예상할 수도 있습니다.

언급URL : https://stackoverflow.com/questions/11877121/sql-insert-statement-return-zero-no-rows-inserted

반응형