Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Der Benutzer des Oracle-Schemas kann keine Tabelle in der Prozedur erstellen

Die Antwort auf Ihre unmittelbare Frage ist, dass Sie ORA-01031: insufficient privileges erhalten weil Ihrem Benutzer das CREATE TABLE-Privileg durch eine Rolle gewährt wurde:Das Oracle-Sicherheitsmodell erzwingt eine Regel, dass wir keine durch Rollen in PL/SQL gewährten Privilegien verwenden können. Daher muss Ihr DBA Ihrem Benutzer das CREATE TABLE-Privileg direkt erteilen.

Oder doch?

Weil das, was Sie versuchen, in Oracle keinen Sinn ergibt. In Oracle sind globale temporäre Tabellen permanent Strukturen; nur die darin enthaltenen Daten sind temporär. Die richtige Lösung besteht also darin, die Tabelle wie jedes andere Datenbankobjekt einmal mit einem normalen DDL-Skript zu erstellen. Dann können Sie einfach nach Bedarf in die globale temporäre Tabelle einfügen.

Sie sind nicht die erste Person auf dieser Seite, die diesen Fehler macht (lesen Sie diesen entsprechenden Thread). Oft liegt es daran, dass Benutzer aus einer anderen Datenbank wie SQL Server kommen, die ein Konstrukt namens "temporäre Tabelle" hat, das sich tatsächlich von den globalen temporären Tabellen von Oracle unterscheidet. Wenn das Ihr Szenario ist, dann werden Sie an einer neuen Funktion von Oracle 18c namens Private Temporary Tables interessiert sein. Diese sind genau analog zu temporären SQL Server-Tabellen. Erfahren Sie mehr.