PL/SQL 블록 문제:데이터를 찾을 수 없음 오류
SET SERVEROUTPUT ON
DECLARE
v_student_id NUMBER := &sv_student_id;
v_section_id NUMBER := 89;
v_final_grade NUMBER;
v_letter_grade CHAR(1);
BEGIN
SELECT final_grade
INTO v_final_grade
FROM enrollment
WHERE student_id = v_student_id
AND section_id = v_section_id;
CASE -- outer CASE
WHEN v_final_grade IS NULL THEN
DBMS_OUTPUT.PUT_LINE ('There is no final grade.');
ELSE
CASE -- inner CASE
WHEN v_final_grade >= 90 THEN v_letter_grade := 'A';
WHEN v_final_grade >= 80 THEN v_letter_grade := 'B';
WHEN v_final_grade >= 70 THEN v_letter_grade := 'C';
WHEN v_final_grade >= 60 THEN v_letter_grade := 'D';
ELSE v_letter_grade := 'F';
END CASE;
-- control resumes here after inner CASE terminates
DBMS_OUTPUT.PUT_LINE ('Letter grade is: '||v_letter_grade);
END CASE;
-- control resumes here after outer CASE terminates
END;
위의 코드는 "Oracle PL/SQL by example, 4th Edition 2009"라는 책에서 인용한 것입니다.내 문제는, 내가 를 입력했을 때,student_id
테이블에 존재하지 않는 경우 다음 오류를 반환합니다.
오류 보고서: ORA-01403: 데이터를 찾을 수 없습니다.ORA-06512: 회선701403. 00000 - "데이터를 찾을 수 없습니다"* 원인:*액션:
하지만 책에 따르면 Null 값을 반환한 후 케이스 플로우를 따라야 합니다.
INTO 변수를 선택하고 있는데 레코드가 반환되지 않으면 NO DATA FOUND 오류가 발생합니다.위의 코드를 올바르게 쓰는 방법은 SELECT 문을 자체 BEGIN/EXCEPTION/END 블록으로 감싸는 것이라고 생각합니다.예:
...
v_final_grade NUMBER;
v_letter_grade CHAR(1);
BEGIN
BEGIN
SELECT final_grade
INTO v_final_grade
FROM enrollment
WHERE student_id = v_student_id
AND section_id = v_section_id;
EXCEPTION
WHEN NO_DATA_FOUND THEN
v_final_grade := NULL;
END;
CASE -- outer CASE
WHEN v_final_grade IS NULL THEN
...
다른 방법이 있습니다. 제가 의지할 수 없을 때EXCEPTION
내 절차의 맨 아래에 차단이 있어.처음에 변수를 선언했습니다.
my_value VARCHAR := 'default';
number_rows NUMBER := 0;
.
.
.
SELECT count(*) FROM TABLE INTO number_rows (etc.)
IF number_rows > 0 -- Then obtain my_value with a query or constant, etc.
END IF;
당신의 책에 대한 에라타 섹션을 온라인으로 확인해 볼 가치가 있을 것이다.
http://www.dba-oracle.com/sf_ora_01403_no_data_found.htm 에 이 예외를 처리하는 예를 나타냅니다.
당신의.SELECT
스테이트먼트는 찾고 있는 데이터를 찾을 수 없습니다.즉, 에 기록이 없습니다.ENROLLMENT
주어진 것과 함께 식사하다STUDENT_ID
그리고.SECTION_ID
. 조금 넣어보는게 좋을 것 같아요.DBMS_OUTPUT.PUT_LINE
쿼리 실행 전 문, 값 인쇄v_student_id
그리고.v_section_id
당신이 원하는 것을 담고 있지 않을 수 있습니다.
이 데이터를 찾을 수 없습니다.사용하고 있는 데이터 타입이 원인입니다.
예를 들어 empid를 v_test로 선택합니다.
위의 empid 및 v_test는 숫자 타입이어야 하며, 데이터만 저장됩니다.
따라서 이 오류가 발생할 때 데이터 유형을 추적하는 것이 도움이 될 수 있습니다.
언급URL : https://stackoverflow.com/questions/1256112/pl-sql-block-problem-no-data-found-error
'programing' 카테고리의 다른 글
각도 소독/ng-bind-html이 작동하지 않나요? (0) | 2023.02.23 |
---|---|
Typescript - 확장 오류 클래스 (0) | 2023.02.23 |
잭슨 - JSON 문자열 직렬화 해제 - TypeReference vs TypeFactory.constructureCollection유형 (0) | 2023.02.23 |
create-react-app에서 css 모듈을 사용하는 방법 (0) | 2023.02.23 |
데이터 바인딩 없이 값 렌더링 (0) | 2023.02.18 |