programing

존재하지 않는 행 업데이트/삭제 시 PL/SQL 예외

batch 2023. 6. 30. 22:13
반응형

존재하지 않는 행 업데이트/삭제 시 PL/SQL 예외

저는 요즘 PL/SQL을 배우고 있으며, 현재 오라클 HR 스키마를 사용하여 Procedures 및 Exception을 진행하고 있습니다.

여기 간단한 절차가 있습니다.

create or replace
PROCEDURE DEL_JOB
(p_jobid jobs.job_id%TYPE)
AS 
sqle NUMBER; 
sqlm VARCHAR2(300);
BEGIN
DELETE FROM JOBS 
WHERE JOB_ID = UPPER(p_jobid);
IF SQL%NOTFOUND THEN
  DBMS_OUTPUT.PUT_LINE('No such record');
END IF;
EXCEPTION
 WHEN OTHERS THEN
  sqle := SQLCODE;
  sqlm := SQLERRM;
  DBMS_OUTPUT.PUT_LINE('There is no job with this id that could be deleted');
  DBMS_OUTPUT.PUT_LINE('Error Code ='||sqle||' Error message =' ||sqlm);
END;

이 절차를 실행하면 출력이

  No such record
  PL/SQL procedure successfully complete. 

그러나 Oracle PDF에 따르면 예외가 발생해야 하며 예외에 입력한 메시지를 정말로 받아야 합니다.

존재하지 않는 레코드에 대한 업데이트에서도 동일한 현상이 발생했습니다.조언 부탁드립니다.감사해요.

믿어요SQL%NOTFOUND돌아온다true기록이 발견되지 않을 때.당신의.IF이 경우 true로 평가되므로 put_line을 터미널에 기록합니다.SQL 문이 성공적으로 실행되었습니다.명령줄에서 해당 SQL 문을 자동으로 실행하면 Oracle 오류가 아닌 0개의 행이 업데이트/삭제됩니다.

예외를 무시하려면 다음을 사용할 수 있습니다.RAISE마음속에IF그리고 던질 예외 블록의 예외를 가리킵니다.

SQL이 성공적으로 실행된 "예외"는 없습니다.기준과 일치하는 모든 기록을 성공적으로 삭제했습니다.0개의 기록이었습니다.유사한 업데이트 문이 실행된 경우에도 마찬가지입니다.SQL%NOTFOUND를 사용하여 영향을 받은 레코드가 없음을 확인했지만 이는 "예외"가 있었다는 것을 의미하지 않습니다.

"select into" 절을 시도했는데 일치하는 레코드를 찾지 못하면 NO_DATA_FOUND 예외가 발생한다고 생각할 수 있습니다.

이를 위해 사용해야 합니다.

IF SQL%ROWCOUNT = 0 THEN
    RAISE no_delete;
END IF;

정의합니다.

언급URL : https://stackoverflow.com/questions/8841892/pl-sql-exceptions-on-update-delete-of-non-existing-row

반응형