sql >> Databasteknik >  >> RDS >> Oracle

Varför behövs UTFÖR OMEDELBART här?

Hela PL/SQL-blocket tolkas vid kompilering, men texten i en dynamisk sats utvärderas inte förrän vid körning. (De är nära samma sak för ett anonymt block, men fortfarande distinkta steg).

Ditt om/annat utvärderas inte förrän körningen heller. Kompilatorn vet inte att tabellen alltid kommer att existera när du infogar, den kan bara kontrollera om den finns eller inte vid den punkt då den analyserar hela blocket.

Om tabellen redan finns är det OK; kompilatorn kan se det, blocket körs, ditt val får 1 och du går in i else för att infoga. Men om det inte finns misslyckas analysen av infogningen korrekt med ORA-00942 vid kompilering och ingenting i blocket exekveras.

Eftersom tabellskapandet är dynamiskt måste alla referenser till tabellen också vara dynamiska - din infogning som du har sett, men också om du sedan frågar efter den. I grund och botten gör det din kod mycket svårare att läsa och kan dölja syntaxfel - eftersom den dynamiska koden inte analyseras förrän vid körning, och det är möjligt att du kan ha ett misstag i en dynamisk sats i en gren som inte träffas för en länge.

Globala temporära tabeller bör ändå inte skapas i farten. De är permanenta objekt med tillfälliga data, specifika för varje session, och bör inte skapas/släppas som en del av din applikationskod. (Inga schemaändringar bör göras av din applikation i allmänhet; de bör begränsas till uppgraderings-/underhållsändringar och kontrolleras för att undvika fel, dataförlust och oväntade biverkningar; GTT:er är inte annorlunda).

Till skillnad från temporära tabeller i vissa andra relationsdatabaser skapar du en statisk tabelldefinition när du skapar en temporär tabell i en Oracle-databas. Den temporära tabellen är ett beständigt objekt som beskrivs i dataordlistan, men visas tom tills din session infogar data i tabellen. Du skapar en temporär tabell för själva databasen, inte för varje lagrad PL/SQL-procedur.

Skapa GTT en gång och gör all din PL/SQL-kod statisk. Om du vill ha något närmare SQL Servers lokala temporära tabeller, titta på PL/SQL-samlingar.



  1. MariaDB JSON_COMPACT() Förklarad

  2. Kan jag automatiskt skapa en tabell i PostgreSQL från en csv-fil med rubriker?

  3. Hur man byter ut en ny linje i Oracle

  4. Välja data till en Postgres-array