존재하지 않는 행 업데이트/삭제 시 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
'programing' 카테고리의 다른 글
데이터 소스를 사용할 수 있을 때까지 스프링 재시도 연결 (0) | 2023.07.05 |
---|---|
기본(슈퍼) 클래스를 초기화하려면 어떻게 해야 합니까? (0) | 2023.06.30 |
엔터티-속성-값 설계(예: 데이터 유형당 여러 개의 열이 있는 단일 테이블 또는 여러 테이블)에서 서로 다른 데이터 유형을 처리하려면 어떻게 해야 합니까? (0) | 2023.06.30 |
SQL Server의 다른 데이터베이스에서 테이블의 데이터를 선택하는 방법은 무엇입니까? (0) | 2023.06.30 |
이 해커는 무엇을 하려고 합니까? (0) | 2023.06.30 |