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

Oracle Sql:Prozedur, die darin temporäre Tabellen erstellen kann

Warum möchten Sie überhaupt eine temporäre Tabelle in einer gespeicherten Prozedur erstellen?

Es ist relativ üblich, temporäre Tabellen in anderen Datenbanken (z. B. SQL Server und MySQL) zu erstellen. Es ist sehr, sehr selten, dasselbe in Oracle zu tun. In fast allen Fällen, in denen Sie versucht sind, eine temporäre Tabelle in Oracle zu erstellen, gibt es einen besseren architektonischen Ansatz. Es gibt einen Thread auf dem DBA-Stack, der Alternativen zu temporären Tabellen und warum sie in Oracle normalerweise nicht benötigt werden.

Programmgesteuert können Sie Objekte mit dynamischem SQL erstellen

CREATE OR REPLACE PROCEDURE dont_do_this
AS
BEGIN
  EXECUTE IMMEDIATE 'CREATE GLOBAL TEMPORARY TABLE a( id INTEGER )';
END;

Wenn Sie jedoch eine temporäre Tabelle dynamisch erstellen, muss jeder Verweis auf diese Tabelle auch über dynamisches SQL erfolgen – Sie können kein einfaches SELECT schreiben Aussagen gegen den Tisch. Und die Definition einer temporären Tabelle in Oracle ist global, sodass sie für jede Sitzung sichtbar ist. Wenn Sie zwei verschiedene Sitzungen haben, die beide versuchen, dieselbe Tabelle zu erstellen, wird bei der zweiten Sitzung ein Fehler ausgegeben. Wenn Sie davon ausgehen, dass die Tabelle in verschiedenen Sitzungen unterschiedliche Definitionen hat, haben Sie noch mehr Probleme.