plsql %NOTFound
왜 이 코드가 작동하지 않는지 궁금할 뿐입니다.공급업체가 없습니다.id=1
내 테이블에
DECLARE
VAR SUPP_NM VARCHAR(100);
VAR_SUPP_ID NUMBER := 1;
WHILE_VAR CHAR := 'Y';
BEGIN
SELECT SUPP_NM
INTO VAR_SUPP_NM
FROM TEST.SUPPLIER
WHERE SUPP_ID = VAR_SUPP_ID;
IF SQL%NOTFOUND THEN
DBMS_OUTPUT.PUT_LINE('SQL DATA NOT FOUND');
ELSIF SQL%FOUND THEN
DBMS_OUTPUT.PUT_LINE('DATA FOUND');
END IF;
END;
Toad에서 01403 오류가 발생하지만 다음과 같이 처리되지 않습니다.sql%notfound
.
왜 그렇지 않습니까?sql%notfound
일하는 중?
잡으려면NO_DATA_FOUND
예외를 추가하여 코드를 다음과 같이 다시 작성합니다.exception
섹션:
DECLARE
VAR_SUPP_NM VARCHAR2(100);
VAR_SUPP_ID NUMBER := 1;
WHILE_VAR CHAR := 'Y';
BEGIN
SELECT SUPP_NM
INTO VAR_SUPP_NM
FROM TEST.SUPPLIER
WHERE SUPP_ID = VAR_SUPP_ID;
DBMS_OUTPUT.PUT_LINE('DATA FOUND');
exception
when no_data_found
then DBMS_OUTPUT.PUT_LINE('SQL DATA NOT FOUND');
END;
체킹SQL%FOUND
아니면SQL%NOTFOUND
의 경우에는 의미가 없습니다select into
statement, select statement가 행을 반환하지 않으면 항상 상승하기 때문에no_data_found
예외입니다. 단, 해당 select 문이 aggregate 함수를 호출하는 경우에는 항상 데이터를 반환하거나 행이 선택되지 않은 경우에는 null을 반환합니다.
사용하지않음varchar
데이터 유형, 사용varchar2
대신 데이터 유형을 입력합니다.
니콜라스의 대답은 당신이 사용하고 싶다면 원하는 것입니다.SELECT INTO
. 그러나 사용할 수 있는 것이 더 중요하다면%FOUND
아니면%NOTFOUND
,고려하다FETCH
대신 커서에서 호출:
DECLARE
VAR SUPP_NM VARCHAR2(100);
VAR_SUPP_ID NUMBER := 1;
WHILE_VAR CHAR := 'Y';
CURSOR c1 IS
SELECT SUPP_NM
FROM TEST.SUPPLIER
WHERE SUPP_ID = VAR_SUPP_ID;
BEGIN
OPEN c1;
FETCH c1 INTO VAR_SUPP_NM;
IF c1%NOTFOUND THEN
DBMS_OUTPUT.PUT_LINE('SQL DATA NOT FOUND');
ELSIF c1%FOUND THEN
DBMS_OUTPUT.PUT_LINE('DATA FOUND');
END IF;
CLOSE c1;
END;
닉의 대답이 맞습니다.
오라클 문서에는 다음과 같이 명시되어 있습니다.SQL%NOTFOUND
함께 일함SELECT INTO
확인하기도 전에SQL%NOTFOUND
참인 경우 오류는 다음과 같이 발생합니다.no_data_found
.
사용하기 위하여SQL%NOTFOUND
먼저 손을 대야 합니다.no_data_found
오류를 범실.
DECLARE
VAR SUPP_NM VARCHAR(100);
VAR_SUPP_ID NUMBER := 1;
WHILE_VAR CHAR := 'Y';
BEGIN
BEGIN
SELECT SUPP_NM
INTO VAR_SUPP_NM
FROM TEST.SUPPLIER
WHERE SUPP_ID = VAR_SUPP_ID;
EXCEPTION
WHEN NO_DATA_FOUND THEN
null; -- or write something here if u want.
END;
IF SQL%NOTFOUND THEN
DBMS_OUTPUT.PUT_LINE('SQL DATA NOT FOUND');
ELSIF SQL%FOUND THEN
DBMS_OUTPUT.PUT_LINE('DATA FOUND');
END IF;
END;
그래서 제가 한 것은 내부에 추가된 것입니다.BEGIN-END
블록을 에워싸다SELECT
생성하는 문no_data_found
예외.그 후에 당신은 다음의 값을 확인할 수 있습니다.SQL%NOTFOUND
.
이에 대한 자세한 내용은 Oracle 문서에서 확인할 수 있습니다.내 시간에 있는 이 활성 링크에서 시작하기 https://docs.oracle.com/cd/B28359_01/appdev.111/b28370/errors.htm#LNPLS00703
언급URL : https://stackoverflow.com/questions/13075538/pl-sql-notfound
'programing' 카테고리의 다른 글
이 핸들러 클래스는 정적이어야 합니다. 그렇지 않으면 누출이 발생할 수 있습니다.들어오는 처리기 (0) | 2023.10.15 |
---|---|
아이들이 한창일 때까지 (0) | 2023.10.15 |
node.js에서 환경 변수를 설정하려면 어떻게 해야 합니까? (0) | 2023.10.15 |
Woocommerce 체크아웃 페이지에서 "다른 주소로 발송" 체크박스를 기본적으로 선택 해제하는 방법 (0) | 2023.10.15 |
구글의 CDN을 jQuery에 사용해야 하는 이유는 무엇입니까? (0) | 2023.10.15 |