programing

ORA-01403: Select to에 대한 데이터를 찾을 수 없습니다.

bestprogram 2023. 7. 31. 21:31

ORA-01403: Select to에 대한 데이터를 찾을 수 없습니다.

나는 받는 중입니다.ORA-01403: no data found다음 쿼리에 대한 예외입니다.이 오류가 발생할 가능성은 얼마입니까?

SELECT trim(name)
  INTO fullname
  FROM ( SELECT n.name
         FROM directory dir, store n
        WHERE dir.name = n.name
          AND dir.status NOT IN ('F', 'L', 'M')
        ORDER BY n.imp, dir.date)
  WHERE rownum <= 1;

이 오류를 어떻게 처리해야 합니까?

WHERE 조건을 설정했지만 레코드를 찾을 수 없거나 '데이터를 찾을 수 없음' 오류가 발생한 경우를 처리하는 것이 좋습니다.나는 위의 코드를 포장하여 쓸 것입니다.SELECT독자적인 진술BEGIN/EXCEPTION/END블록으로 막다

코드는 다음과 같을 수 있습니다.

BEGIN
    SELECT trim(name) 
    INTO fullName
    FROM (
        SELECT n.name
        FROM directory dir, store n
        WHERE dir.name = n.name
        AND dir.STATUS NOT IN ('F','L','M')           
        ORDER BY n.imp, dir.date
    )
    WHERE rownum <= 1;
EXCEPTION
    WHEN NO_DATA_FOUND THEN
        fullName := NULL;
END;

Sandeep가 설명한 표준 예외 처리가 (의 경우와 마찬가지로) 많은 오버헤드로 보이고 a 또는 일부 개별 <찾을 없음> 값에도 문제가 없다면 다음과 같이 변환할 수 있습니다.

select  col  into  v_foo  from  bar  where 1=0  -- would provoke ORA-01403

=> ORA-01403이 제기되지 않음:

-- if NULL would be fine:

select  (select  col  from  bar  where 1=0)  into  v_foo  from dual

-- if individual "NOT_FOUND" value should be set to avoid standard exception handling:
--    (it depends on your col type, so it could e.g. be 'NOT_FOUND' or -1 
--     or to_date( 'yyyy-mm-dd', '2100-01-01') )

select  nvl(  (select  col  from  bar  where 1=0),  'NOT_FOUND'  )  into  v_foo  from dual

아마도 당신의 질문 때문일 것입니다.

SELECT n.name
        FROM directory dir,
          store n
        WHERE dir.name            = n.name
        AND dir.STATUS NOT                IN ('F','L','M')           
        ORDER BY n.imp,
          dir.date

행을 반환하지 않습니다.

한다면dir.status테이블에 null이 있는 경우not in아마도 당신이 생각하는 것처럼 하지 않을 것입니다.행을 하나 이상 얻어야 한다고 생각해도 행이 0개일 수 있습니다.다음으로 전환할 수 있습니다.and not (dir.status in ('F,'L','M'))대신에dir.status not in ('F','L','M').

참조용으로 이 항목을 참조하십시오.

예외는 잊어버려요...듀얼 테이블을 사용합니다.

select (
SELECT trim(name)
  FROM ( SELECT n.name
         FROM directory dir, store n
        WHERE dir.name = n.name
          AND dir.status NOT IN ('F', 'L', 'M')
        ORDER BY n.imp, dir.date)
  WHERE rownum <= 1
) into fullname
from dual;

B-) 쿼리에서 아무것도 반환하지 않으면 변수가 null로 채워집니다.

언급URL : https://stackoverflow.com/questions/21186411/ora-01403-no-data-found-for-select-into