Share via


TABLE_OR_VIEW_NOT_FOUND 오류 클래스

SQLSTATE: 42P01

테이블 또는 뷰를 <relationName> 찾을 수 없습니다. 스키마 및 카탈로그의 맞춤법 및 정확성을 확인합니다.

스키마로 이름을 한정하지 않은 경우 current_schema() 출력을 확인하거나 올바른 스키마 및 카탈로그로 이름을 한정합니다.

삭제에 대한 오류를 허용하려면 DROP VIEW IF EXISTS 또는 DROP TABLE IF EXISTS를 사용합니다.

매개 변수

  • relationName: 찾을 수 없는 지정된 관계(테이블 또는 뷰)의 이름입니다.

설명

지속형 테이블 및 뷰는 세 가지 이름 부분 <catalog>.<schema>.<relation>인 로 구성됩니다. 이름의 세 부분을 모두 지정하지 않으면 현재 카탈로그 또는 현재 스키마를 사용하여 암시적으로 완료됩니다. 이는 경로를 완전히 지정하지 않는 한 파일 시스템의 작업 디렉터리가 볼 수 있는 파일에 영향을 미치는 방식과 유사합니다.

임시 뷰 또는 CTE(일반 테이블 식)는 세션 또는 쿼리 내에만 존재하며 정규화되어서는 안 됩니다.

테이블이나 뷰를 찾지 못하는 가장 일반적인 이유는 다음과 같습니다.

  • 개체가 존재하지 않습니다.
  • 개체 이름, 스키마 또는 카탈로그의 철자가 잘못되었습니다.
  • 개체가 현재 스키마에 없습니다.
  • 사용자는 개체에 액세스할 수 없으므로 볼 수 없습니다.

완화 방법

오류 완화는 원인에 따라 달라집니다.

  • 테이블 또는 뷰, 스키마 또는 카탈로그 이름을 잘못 입력했나요?

    맞춤법을 수정합니다.

  • 이름을 완전히 한정하지 않았나요? 의 결과가 VALUES current_schema() 테이블 또는 뷰의 정규화된 이름과 일치하지 않나요?

    스키마 및 카탈로그를 relationName 사용하여 를 명시적으로 한정하거나 명령을 실행 USE SCHEMA 하여 원하는 암시적 스키마를 설정합니다.

  • 임시 보기를 참조했지만 이전, 만료되었거나 다른 세션에 있었나요?

    를 사용하여 CREATE TEMPORARY VIEW <relationName> …임시 보기를 다시 만들거나 영구 보기를 사용하여 로 전환합니다.

  • CTE(공용 테이블 식)를 참조했지만 scope 않습니다.

    CTE 정의를 가장 바깥쪽 쿼리로 이동합니다. 이것이 문의 시작이므로 문 내의 모든 곳에서 볼 수 있습니다.

  • 개체가 있는 경우 'DROP TABLE'과 같은 DDL 문을 실행하시겠습니까?

    다음과 같은 DROP TABLE <relationName> IF EXISTS절을 IF EXISTS 사용하여 문을 실행합니다.

  • 개체가 있다는 것을 알고 있지만?SHOW TABLE

    관리자에게 문의하여 부여된 테이블에 액세스할 수 있습니다. 스키마 및 카탈로그에 대한 액세스도 포함해야 할 수 있습니다.

  • 테이블이나 뷰를 resolve 수 없는 이유는 불분명합니다.

    이름 확인에 대한 자세한 설명은 테이블 및 뷰 해상도 를 참조하세요.

-- The table is located in othercat.someschema
> SELECT count(*) FROM t;
 [TABLE_OR_VIEW_NOT_FOUND] The table or view `t` cannot be found.

> VALUES current_schema();
 default

-- Change the current schema
> USE SCHEMA othercat.someschema;
> SELECT count(*) FROM T;
 1

-- Alternatively qualify the table
> SELECT count(*) FROM othercat.someschema.t;
 1

-- A reference to a CTE in the wrong scope:
> SELECT count(1) FROM (WITH v(c1) AS (VALUES (1)) VALUES(2)) AS t(c1), v;
 [TABLE_OR_VIEW_NOT_FOUND] The table or view `v` cannot be found.

-- Move the CTE to top level
> WITH v(c1) AS (VALUES (1))
  SELECT count(1) FROM VALUES(2) AS t(c1), v;
 1

-- Dropping a non existing view
> DROP VIEW v;
 [TABLE_OR_VIEW_NOT_FOUND] The table or view `v` cannot be found.

> DROP VIEW IF EXISTS v;