2012-12-09 12 views
6

W MS SQL Server można zadeklarować zmienne lokalne dowolnego typu pierwotnego lub typu tabeli. Ta tabela jest normalną tabelą, na której można uruchamiać SELECT, INSERT, UPDATE i DELETE na, podobnie jak w każdej innej tabeli, z wyjątkiem tego, że jest to zmienna lokalna, a nie część samej bazy danych.Czy istnieje sposób na utworzenie zmiennej tabeli lokalnej wewnątrz procesu przechowywanego przez Firebird?

Próbuję zrobić to samo w Firebird, ale wydaje się, że nie podoba mi się składnia.

declare variable value int; --works fine 
declare variable values table (value int); --Error: "Token unknown (table)" 

Czy jest jakiś sposób to zrobić? (I zanim ktoś mówi „skorzystać z procedury przechowywane selekcyjny, że” nie będzie działać. Muszę coś mogę dynamicznie prowadzony INSERT i SELECT dalej.)

Odpowiedz

13

Firebird nie obsługuje zmienne tabeli w taki sam sposób SQL Server robi.

Bliskie rzeczą, którą miał do swojej dyspozycji jest Global Temporary Tables (Wymaga Firebird 2.1 lub wyższa)

(2.1) globalne tabele tymczasowe (GTTs) są tabele, które są przechowywane w katalogu systemowym ze stałym metadanych , ale z danymi tymczasowymi. Dane z różnych połączeń (lub transakcji w zależności od zakresu) są od siebie izolowane, ale metadane GTT są wspólne dla wszystkich połączeń i transakcji.

Istnieją dwa rodzaje GTT:

z danymi, które utrzymuje się przez cały czas trwania połączenia, w której określona została GTT odwołanie; i

z danymi, które występują tylko przez cały okres trwania transakcji referencyjnej.

Musisz wcześniej utworzyć GTT.

CREATE GLOBAL TEMPORARY TABLE 
    ... 
    [ON COMMIT <DELETE | PRESERVE> ROWS] 
Powiązane problemy