[SQL] PL / SQL 블록 문제 : 없음 데이터 오류를 발견
SQLPL / 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;
나는 테이블에 존재하는 student_id를하지 입력 할 때 나는이 책에서 촬영 한 위의 코드 "예에 의해 오라클 PL / SQL, 제 4 판 2009 년"내 문제는 나에게 다음과 같은 오류를 반환이다
Error report: ORA-01403: no data found ORA-06512: at line 7 01403. 00000 - "no data found" *Cause: *Action:
하지만 책에 따라 NULL 값을 반환하고 사건의 흐름을 따라해야합니다.
해결법
-
==============================
1.당신이 변수로 선택하고있다 때 레코드를 사용하면 데이터의 FOUND 오류가 발생한다 반환하지 않습니다. 나는 위의 코드를 작성하는 올바른 방법은 그 자체가 BEGIN / 예외 / END 블록으로 SELECT 문을 래핑하는 것입니다 생각합니다. 예:
당신이 변수로 선택하고있다 때 레코드를 사용하면 데이터의 FOUND 오류가 발생한다 반환하지 않습니다. 나는 위의 코드를 작성하는 올바른 방법은 그 자체가 BEGIN / 예외 / END 블록으로 SELECT 문을 래핑하는 것입니다 생각합니다. 예:
... 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 ...
-
==============================
2.책에 대한 정오표 섹션 온라인 체크 가치가 될 수 있습니다.
책에 대한 정오표 섹션 온라인 체크 가치가 될 수 있습니다.
여기 http://www.dba-oracle.com/sf_ora_01403_no_data_found.htm이 예외를 처리하는 예는있다
-
==============================
3.귀하의 SELECT 문은 당신이 찾고있는 데이터를 찾을 수 없습니다. 즉, 주어진 STUDENT_ID와 SECTION_ID에 등록 테이블에 기록이 없습니다. 당신은 v_student_id 및 v_section_id의 값을 인쇄, 쿼리를 실행하기 전에 몇 가지 DBMS_OUTPUT.PUT_LINE 문을 넣어 시도 할 수 있습니다. 그들은 당신이 그 (것)들을 포함하는 기대가 포함되지 않을 수 있습니다.
귀하의 SELECT 문은 당신이 찾고있는 데이터를 찾을 수 없습니다. 즉, 주어진 STUDENT_ID와 SECTION_ID에 등록 테이블에 기록이 없습니다. 당신은 v_student_id 및 v_section_id의 값을 인쇄, 쿼리를 실행하기 전에 몇 가지 DBMS_OUTPUT.PUT_LINE 문을 넣어 시도 할 수 있습니다. 그들은 당신이 그 (것)들을 포함하는 기대가 포함되지 않을 수 있습니다.
-
==============================
4.내 절차의 하단에있는 예외 블록에 의존 수 없을 때 내가 사용하는 다른 방법이있다. 나는 변수 시작 부분에 선언했다 :
내 절차의 하단에있는 예외 블록에 의존 수 없을 때 내가 사용하는 다른 방법이있다. 나는 변수 시작 부분에 선언했다 :
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;
-
==============================
5.일부 데이터 유형의 우리가 사용하고 있기 때문에이 데이터는 원인을 찾을 수 없습니다.
일부 데이터 유형의 우리가 사용하고 있기 때문에이 데이터는 원인을 찾을 수 없습니다.
같은 v_test에 EMPID 선택
EMPID 및 v_test는 숫자 형식이어야 위에 만 데이터가 저장된다.
이 오류를 가져올 때 데이터 형식의 KEEP 트랙 그래서,이 뜻에 도움이 될 수 있습니다
from https://stackoverflow.com/questions/1256112/pl-sql-block-problem-no-data-found-error by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 어떻게 NULL 값은 데이터베이스 검색의 성능에 영향을합니까? (0) | 2020.06.03 |
---|---|
[SQL] 다른 테이블의 데이터를 하나 개의 테이블에서 업데이트 된 행이 각각 동일하고 하나의 열에 기초 (0) | 2020.06.03 |
[SQL] 어떻게 SQL 단지 하나의 필드에 중복없이 레코드를 선택하려면? (0) | 2020.06.03 |
[SQL] ORDER BY 절은 뷰, 인라인 함수, 파생 테이블, 하위 쿼리 및 공통 테이블 표현식에서 유효하지 않습니다 (0) | 2020.06.03 |
[SQL] T-SQL은 : UPDATE 문에 CASE를 사용하여 조건에 따라 특정 열을 업데이트 (0) | 2020.06.03 |