Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   temporäre tabelle erstellen in stored procedure? (https://www.delphipraxis.net/168237-temporaere-tabelle-erstellen-stored-procedure.html)

Serienchiller 10. Mai 2012 16:00

Datenbank: firebird • Version: 2.1 • Zugriff über: ib expert

temporäre tabelle erstellen in stored procedure?
 
hallo alle zusammen!

ich beiße mir grad die zähne aus, daran eine temp tabelle zu createn im ibexpert.

wenn ich create table schreibe, kennt er create nicht, also muss ich die syntax in ein "execute statement" packen. das klappt auch alles wunderbar. die tabelle ist nach einem commit da.

jedoch möchte ich mit der tabelle IN der prozedur arbeiten und da sagt mir schon der compiler, dass er den namen der tabelle nicht kennt...

ein commit zwischen durch zu machen, habe ich auch versucht, aber bringt leider auch nix. :(

wäre sehr dankbar wenn mir jemand helfen könnte :)

vagtler 10. Mai 2012 16:41

AW: temporäre tabelle erstellen in stored procedure?
 
Hilft Dir das Stichwort "GLOBAL TEMPORARY TABLE" weiter?

Iwo Asnet 10. Mai 2012 17:04

AW: temporäre tabelle erstellen in stored procedure?
 
Code:
declare @table table (foo int, bar varchar(10))
insert into @table (foo,bar) values (1,'bar')

omata 10. Mai 2012 17:34

AW: temporäre tabelle erstellen in stored procedure?
 
@Iwo Asnet: Das geht in Firebird jetzt auch so wie in MSSQL? Das habe ich noch gar nicht gewusst, das ist ja cool.

p80286 10. Mai 2012 18:00

AW: temporäre tabelle erstellen in stored procedure?
 
Zitat:

Zitat von omata (Beitrag 1165935)
@Iwo Asnet: Das geht in Firebird jetzt auch so wie in MSSQL? Das habe ich noch gar nicht gewusst


So scheint es vielen zu gehen, Tante Google hat da auch nur MSSQL gefunden.
gibt's da einen Link?

Gruß
K-H

Iwo Asnet 10. Mai 2012 18:06

AW: temporäre tabelle erstellen in stored procedure?
 
Zitat:

Zitat von omata (Beitrag 1165935)
@Iwo Asnet: Das geht in Firebird jetzt auch so wie in MSSQL? Das habe ich noch gar nicht gewusst, das ist ja cool.

Ja, ne. Ich wusste auch nicht, das man MSSQL neuerdings mit 'F' schreibt (und danach sowas wie 'i.r.e.b.i.r.d'). Das klingt ganz anders, finde ich.

Ich schwöre! Eben stand oben noch MSSQL!

:oops:

tsteinmaurer 11. Mai 2012 07:05

AW: temporäre tabelle erstellen in stored procedure?
 
Ich würde eine temporäre Tabelle außerhalb der Stored Procedure erstellen und die dann halt in der SP verwenden. Die Tabellendefinition einer temporären Tabelle ist global und kann von jedem verwendet werden. Die Daten sind dann halt "lokal" zur Transaktion bzw. Connection, je nach Verwendung.

Siehe: http://www.firebirdsql.org/file/docu...ddl-table.html

vagtler 11. Mai 2012 09:04

AW: temporäre tabelle erstellen in stored procedure?
 
Zitat:

Zitat von tsteinmaurer (Beitrag 1166023)
[...] temporäre Tabelle [...]

Mein obiger Hinweis auf Firebirds GTT wurde ja bislang geflissentlich ignoriert - vielleicht hat Dein Votum mehr Gewicht. :?

Hansa 11. Mai 2012 13:17

AW: temporäre tabelle erstellen in stored procedure?
 
Wozu werden denn diese temporären Daten gebraucht ? Ich vermute stark, ein ClientDataset wäre da wesentlich praktikabler. Auch bekannt unter dem Namen "InMemoryTable". Die beschriebenen Probleme wäre dann so jedenfalls nie aufgetaucht.

Sir Rufo 11. Mai 2012 23:16

AW: temporäre tabelle erstellen in stored procedure?
 
Zitat:

Zitat von Hansa (Beitrag 1166087)
Wozu werden denn diese temporären Daten gebraucht ? Ich vermute stark, ein ClientDataset wäre da wesentlich praktikabler. Auch bekannt unter dem Namen "InMemoryTable". Die beschriebenen Probleme wäre dann so jedenfalls nie aufgetaucht.

Cool, Firebird hat auch ein TClientDataSet ... das wusste ich noch nicht.
Das löst ja alles.

Kannst du uns auch noch erklären wie man in der Stored Procedure damit arbeitet?

Hansa 12. Mai 2012 10:06

AW: temporäre tabelle erstellen in stored procedure?
 
Zitat:

Zitat von Sir Rufo (Beitrag 1166192)
Cool, Firebird hat auch ein TClientDataSet ... das wusste ich noch nicht.

Du weisst vieles nicht. :mrgreen: Was ein ClientDataset macht oder wozu man das nutzen kann, ist dazu noch immer weitgehend unbekannt. Dir offensichtlich auch.

In der Frage steht das Wort "temporär" und dann noch "stored". Das widerspricht sich etwas. Ich speichere also etwas, was nur zu kurzzeitigem Gebrauch genutzt wird. Da stellt sich die Frage, warum ich das überhaupt anlege und wieder lösche. Und dazu die SP permanent in der DB haben ? Gehts vielleicht auch anders ?

Neumann 12. Mai 2012 10:43

AW: temporäre tabelle erstellen in stored procedure?
 
Temporäre Tabellen machen schon Sinn. Wenn ich eine Tabelle mit vielen Datensätzen oder einen View mit Joins habe, können Berechnungen trotz Where-Klausel teilweise lange dauern.

Wenn man den interessanten Bereich erst insgesamt in eine Temporäre Tabelle Kopiert und dann seine Berechnungen auf diese anwendet kann man den ganzen Vorgang erheblich schneller machen. Ich konnte so den Faktor 10 und mehr erreichen.

jobo 12. Mai 2012 12:11

AW: temporäre tabelle erstellen in stored procedure?
 
Wie wärs damit:
Code:
create global temporary table MyConnGTT (
  id int not null primary key,
  txt varchar(32),
  ts timestamp default current_timestamp
)
on commit preserve rows;
(siehe dazu http://www.firebirdsql.org/refdocs/l...ddl-table.html)

Wenn Du eh mit einer Stored Procedure arbeiten willst, tut's doch vielleicht auch ein
Code:
FOR select_statement DO
compound_statement
In dem die benötigten Daten zusammen geraffelt und bearbeitet werden?
Eine temporäre Tabelle macht m.E. eher selten Sinn.
Und ein TClientDataset zur Datenverarbeitung macht nur Sinn, wenn es der Server nicht kann, wenn mir Bandbreite und Laufzeit egal ist oder wenn ich meinen Verarbeitungs-Code verstecken muss/möchte.

P.S.: Wichtig bei der Tabellendefinition ist der On Commit Teil. Lebensdauer Transaktion oder ganze Connection..? An der Stelle bist Du vielleicht gestolpert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:22 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz