Oracle
 sql >> база данни >  >> RDS >> Oracle

Грешка ORA-00942 се генерира при създаване на изглед

Първата стъпка в диагностицирането на проблем при създаване на изглед е да опитате select част сама по себе си. В този случай пак ще получите грешката ORA-00942, но проблемът сега е само въпрос на заявка и достъп и не е свързан конкретно с изгледа.

Когато получите ORA-00942:таблица или изглед не съществува , това е защото:

  1. Името на таблицата или изгледа, което сте въвели, наистина не съществува.

    • Проверете правописа - може би има правописна грешка.

    • Свързани ли сте с база данни, където тя съществува? Може би сте на тестова система, която го няма.

    • Заявка dba_objects за да видите дали таблицата съществува в друга схема. (Ако нямате права да правите заявки към dba_objects, all_objects изброява всичко, за което имате разрешение да преглеждате, което може да е от полза.)

  2. Наистина съществува, но е в друга схема.
    В такъв случай има два възможни проблема:

    • Нямате разрешение да го правите. Собственикът на таблицата трябва да grant read on xyz (заменете действителното име на таблицата с xyz ) към едно от двете

      • ти

      • public (ако искате всеки да може да вижда данните, не винаги е препоръчително)

      • роля които имате (но ролите не се използват от съхранен PL/SQL или изгледи , така че е възможно да можете да заявите таблица в друга схема благодарение на ролята, която имате, но все пак да не можете да създадете изглед или процедура, която го използва.)

    • Трябва да посочите схемата. Кажете, че искате да направите заявка за REGIONS таблица в HR но сте свързани като SCOTT . Ако просто select * from regions ще търси SCOTT.REGIONS , който не съществува. За да коригирате това, направете едно от следните:

      • използвайте hr.regions изрично във вашата заявка.

      • във вашата схема create or replace synonym regions for hr.regions;
        Сега всеки път, когато се позовавате на regions , базата данни автоматично ще пренасочи към hr.regions .

      • във всяка схема с разрешение за създаване на публични синоними:
        create or replace public synonym regions for hr.regions;
        Сега всеки, който се свързва с базата данни, ще има препратки към regions пренасочен към hr.regions , което не винаги е добра идея, но все пак е една от възможностите.

      • alter session set current_schema = hr;
        Сега схемата по подразбиране за разрешаване на имена на обекти е HR а не тази, в която сте влезли. За приложения, които винаги влизат като потребител, различен от този, който притежава таблиците, можете да създадете след тригер за влизане така че това винаги е зададено. Тогава те могат просто да се позовават на regions и т.н., без да е необходимо да се указва каквато и да е схема и без синоними.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle генерира списък с дати от IW седмица

  2. RU или RUR?

  3. REAL тип данни в PLSQL

  4. Грешка в SQL тригера - невалиден тригер

  5. Разлики между MySQL и Oracle DB