TABLE_OR_VIEW_NOT_FOUND kelas kesalahan

SQLSTATE: 42P01

Tabel atau tampilan <relationName> tidak dapat ditemukan. Verifikasi ejaan dan kebenaran skema dan katalog.

Jika Anda tidak memenuhi syarat nama dengan skema, verifikasi output current_schema(), atau kualifikasi nama dengan skema dan katalog yang benar.

Untuk mentolerir kesalahan saat dihilangkan, gunakan DROP VIEW IF EXISTS atau DROP TABLE IF EXISTS.

Parameter

  • relationName: Nama relasi yang ditentukan (tabel atau tampilan) yang tidak dapat ditemukan.

Penjelasan

Tabel dan tampilan yang bertahan terdiri dari tiga bagian nama: <catalog>.<schema>.<relation>. Jika Anda tidak menentukan ketiga bagian nama, itu secara implisit diselesaikan menggunakan katalog saat ini atau skema saat ini. Ini mirip dengan cara direktori kerja sistem file Anda memengaruhi file mana yang dapat Anda lihat, kecuali Anda sepenuhnya menentukan jalurnya.

Tampilan sementara atau ekspresi tabel umum (CTE) hanya ada dalam sesi atau kueri dan tidak boleh memenuhi syarat.

Alasan paling umum untuk tidak menemukan tabel atau tampilan adalah:

  • Objek tidak ada.
  • Nama objek, skema, atau katalog salah eja.
  • Objek tidak terletak di dalam skema saat ini.
  • Pengguna tidak memiliki akses ke objek dan karena itu tidak dapat melihatnya.

Mitigasi

Mitigasi kesalahan tergantung pada penyebabnya:

  • Apakah Anda salah mengeja tabel atau tampilan, skema, atau nama katalog?

    Koreksi ejaan.

  • Apakah Anda tidak sepenuhnya memenuhi syarat nama dan hasilnya VALUES current_schema() tidak cocok dengan nama tabel atau tampilan yang memenuhi syarat?

    Secara eksplisit memenuhi syarat relationName dengan skema dan katalognya, atau mengeluarkan USE SCHEMA perintah untuk mengatur skema implisit yang diinginkan.

  • Apakah Anda mereferensikan tampilan sementara, tetapi berada di sesi sebelumnya, kedaluwarsa, atau berbeda?

    Buat ulang tampilan sementara menggunakan CREATE TEMPORARY VIEW <relationName> …, atau beralih menggunakan tampilan permanen.

  • Apakah Anda mereferensikan ekspresi tabel umum (CTE), tetapi di luar cakupan?

    Pindahkan definisi CTE ke kueri terluar. Itu adalah awal pernyataan, sehingga terlihat di mana-mana dalam pernyataan.

  • Apakah Anda ingin mengeluarkan pernyataan DDL, seperti 'DROP TABLE' untuk berjaga-jaga jika objek ada?

    Terbitkan pernyataan menggunakan IF EXISTS klausul , seperti: DROP TABLE <relationName> IF EXISTS.

  • Apakah Anda tahu objek itu ada, tetapi Anda tidak dapat melihatnya?SHOW TABLE

    Hubungi administrator Anda untuk mendapatkan akses ke tabel yang diberikan. Ini mungkin perlu mencakup akses ke skema dan katalog juga.

  • Tidak jelas mengapa Anda tidak dapat menyelesaikan tabel atau tampilan?

    Lihat Tabel dan lihat resolusi untuk deskripsi terperinci tentang resolusi nama.

Contoh

-- 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;