sql >> Database >  >> RDS >> Oracle

ORA-00942-fout wordt gegenereerd tijdens het maken van een weergave

De eerste stap bij het diagnosticeren van een probleem bij het maken van een weergave is om de select . te proberen deel op zich. In dit geval zou u nog steeds de ORA-00942-fout krijgen, maar het probleem is nu slechts een vraag- en toegangsprobleem en heeft niet specifiek te maken met de weergave.

Wanneer u ORA-00942:tabel of weergave niet bestaat . krijgt , het is omdat ofwel:

  1. De tabel- of weergavenaam die je hebt getypt, bestaat echt niet.

    • Controleer de spelling - misschien is er een typefout.

    • Bent u verbonden met een database waar deze bestaat? Misschien zit u op een testsysteem dat dit niet heeft.

    • Zoekopdracht dba_objects om te zien of de tabel in een ander schema bestaat. (Als u geen rechten heeft om dba_objects te doorzoeken, all_objects geeft alles weer waarvoor je toestemming hebt om te bekijken, wat misschien wat hulp kan bieden.)

  2. Het bestaat echt, maar het staat in een ander schema.
    In dat geval zijn er twee mogelijke problemen:

    • U heeft geen toestemming om het op te vragen. De eigenaar van de tabel moet grant read on xyz (vervang de werkelijke tabelnaam door xyz ) naar een van beide

      • jij

      • public (als je wilt dat iedereen de gegevens kan zien, is dat niet altijd aan te raden)

      • een rol die je hebt (maar rollen worden niet gebruikt door opgeslagen PL/SQL of weergaven , het is echter mogelijk dat u een query kunt uitvoeren op een tabel in een ander schema dankzij een rol die u heeft, maar nog steeds geen weergave of procedure kunt maken die deze gebruikt.)

    • U moet het schema opgeven. Stel dat u de REGIONS . wilt opvragen tabel in HR maar je bent verbonden als SCOTT . Als je gewoon select * from regions het zoekt naar SCOTT.REGIONS , die niet bestaat. Voer een van de volgende handelingen uit om dit op te lossen:

      • gebruik hr.regions expliciet in uw vraag.

      • create or replace synonym regions for hr.regions;
        Nu wanneer u verwijst naar regions , zal de database automatisch doorverwijzen naar hr.regions .

      • in elk schema met toestemming om openbare synoniemen te maken:
        create or replace public synonym regions for hr.regions;
        Nu heeft iedereen die verbinding maakt met de database verwijzingen naar regions doorgestuurd naar hr.regions , wat niet altijd een goed idee is, maar het is sowieso een optie.

      • alter session set current_schema = hr;
        Het standaardschema voor het oplossen van namen van objecten is nu HR en niet degene waarmee je bent ingelogd. Voor toepassingen die altijd inloggen als een andere gebruiker dan degene die de tabellen bezit, kunt u een na aanmeldingstrigger dus dit is altijd ingesteld. Dan kunnen ze gewoon verwijzen naar regions enz. zonder een schema op te geven en zonder synoniemen.



  1. Groeperen op clausules - elein's GeneralBits

  2. MySQL-prestaties bij het updaten van rij met FK

  3. PostgreSQL - krijg gematerialiseerde metagegevens van de weergavekolom

  4. Verschil tussen Inner join en Outer join in SQL