sql >> Databasteknik >  >> RDS >> Oracle

Oracle-schemaanvändare kan inte skapa tabell i proceduren

Svaret på din omedelbara fråga är att du får ORA-01031: insufficient privileges eftersom din användare har CREATE TABLE-behörigheten beviljad genom en roll:Oracles säkerhetsmodell tillämpar en regel att vi inte kan använda privilegier som beviljas genom roller i PL/SQL. Så du behöver din DBA för att ge din användare privilegiet CREATE TABLE direkt.

Eller gör du det?

För det du försöker göra är inte vettigt i Oracle. I Oracle är globala temporära tabeller permanenta strukturer; det är bara data i dem som är tillfälliga. Så den korrekta lösningen är att bygga tabellen en gång med ett normalt DDL-skript, som vilket annat databasobjekt som helst. Sedan kan du bara infoga i den globala temporära tabellen som du behöver.

Du är inte den första personen på denna sida som gör detta misstag (läs denna relevanta tråd). Ofta beror det på att folk kommer från en annan databas som SQL Server som har en konstruktion som kallas "temporary table" som faktiskt skiljer sig från Oracles globala temporära tabeller. Om det är ditt scenario kommer du att vara intresserad av en ny funktion i Oracle 18c som heter Private Temporary Tables. Dessa är exakt analoga med temporära SQL Server-tabeller. Ta reda på mer.




  1. Hur använder man COUNT i SQL?

  2. Versionering av SQL Server-databas

  3. MariaDB JSON_ARRAY_APPEND() Förklarad

  4. Vad händer med en oengagerad transaktion när anslutningen stängs?