sql >> Database >  >> RDS >> Oracle

Oracle Sql:Procedure die tijdelijke tabellen erin kan maken

Waarom wil je in de eerste plaats een tijdelijke tabel in een opgeslagen procedure maken?

Het is relatief gebruikelijk om tijdelijke tabellen te maken in andere databases (bijvoorbeeld SQL Server en MySQL). Het is zeer, zeer zeldzaam om hetzelfde te doen in Oracle. In bijna alle gevallen waarin u in de verleiding komt om een ​​tijdelijke tabel in Oracle te maken, is er een betere architecturale aanpak. Er is een thread over de DBA-stack die alternatieven voor tijdelijke tabellen en waarom ze niet vaak nodig zijn in Oracle.

Programmatisch kunt u objecten maken met dynamische SQL

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

Als u echter dynamisch een tijdelijke tabel maakt, moet elke verwijzing naar die tabel ook via dynamische SQL zijn - u kunt geen eenvoudige SELECT schrijven uitspraken tegen de tafel. En de definitie van een tijdelijke tabel in Oracle is globaal, zodat deze voor elke sessie zichtbaar is. Als u twee verschillende sessies hebt die beide dezelfde tafel proberen te maken, krijgt de tweede sessie een foutmelding. Als je verwacht dat de tabel in verschillende sessies een andere definitie heeft, heb je nog meer problemen.



  1. Verbinding maken met SQL Server 2012-database met C# (Visual Studio 2012)

  2. Hoe ORA-28000 op te lossen, het account is vergrendeld

  3. Hoe de volledige zoekopdracht te zien van PROCESSLIST TOON

  4. Transparante gegevensversleuteling en altijd versleuteld