sql >> Database teknologi >  >> RDS >> Oracle

ORA-00942-fejl genereres under oprettelse af en visning

Det første trin i at diagnosticere et problem, når du opretter en visning, er at prøve select del for sig selv. I dette tilfælde vil du stadig få ORA-00942-fejlen, men problemet er nu kun et spørgsmål om forespørgsel og adgang og har ikke at gøre med visningen specifikt.

Når du får ORA-00942:tabel eller visning eksisterer ikke , det er fordi enten:

  1. Tabel- eller visningsnavnet, som du har indtastet, eksisterer virkelig ikke.

    • Tjek stavningen - måske er der en tastefejl.

    • Er du forbundet til en database, hvor den findes? Måske er du på et testsystem, der ikke har det.

    • Forespørg dba_objects for at se, om tabellen findes i et andet skema. (Hvis du ikke har rettigheder til at forespørge dba_objects, all_objects viser alt, hvad du har tilladelse til at se, hvilket kan være en hjælp.)

  2. Det eksisterer virkelig, men det er i et andet skema.
    I så fald er der to mulige problemer:

    • Du har ikke tilladelse til at forespørge på det. Tabellens ejer skal grant read on xyz (erstat det faktiske tabelnavn med xyz ) til enten

      • dig

      • public (hvis du ønsker, at alle skal kunne se dataene, er det ikke altid tilrådeligt)

      • en rolle som du har (men roller bruges ikke af lagret PL/SQL eller visninger , dog, så det er muligt, at du kan forespørge en tabel i et andet skema takket være en rolle, du har, men stadig ikke være i stand til at oprette en visning eller en procedure, der bruger den.)

    • Du skal angive skemaet. Lad os sige, at du vil forespørge på REGIONS tabel i HR men du er forbundet som SCOTT . Hvis du bare select * from regions den vil lede efter SCOTT.REGIONS , som ikke eksisterer. For at rette det, skal du gøre et af følgende:

      • brug hr.regions udtrykkeligt i din forespørgsel.

      • i dit skema, create or replace synonym regions for hr.regions;
        Nu, når du henviser til regions , vil databasen automatisk omdirigere til hr.regions .

      • i ethvert skema med tilladelse til at oprette offentlige synonymer:
        create or replace public synonym regions for hr.regions;
        Nu vil alle, der forbinder til databasen, have referencer til regions omdirigeret til hr.regions , hvilket ikke altid er en god idé, men det er alligevel én mulighed.

      • alter session set current_schema = hr;
        Nu er standardskemaet til løsning af navne på objekter HR og ikke den du loggede ind på. For programmer, der altid logger ind som en anden bruger end den, der ejer tabellerne, kan du oprette en efter logon-trigger så dette er altid indstillet. Så kan de blot henvise til regions osv. uden at skulle angive noget skema og uden nogen synonymer.



  1. Skal jeg undgå COUNT alle sammen i InnoDB?

  2. Regex fanger de første ord før tegn efterfølgende - orakel

  3. Kombination af feltsøgning ved hjælp af PHP &MYSQL

  4. LEFT JOIN returnerer ikke alle poster fra venstre sidetabel