AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Firebird: DDL und DML in einer Transaktion
Thema durchsuchen
Ansicht
Themen-Optionen

Firebird: DDL und DML in einer Transaktion

Ein Thema von hoika · begonnen am 21. Jul 2010 · letzter Beitrag vom 25. Jul 2010
Antwort Antwort
Seite 1 von 2  1 2      
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#1

Firebird: DDL und DML in einer Transaktion

  Alt 21. Jul 2010, 15:40
Datenbank: Firebird • Version: 2 • Zugriff über: egal
Hallo #,

bisher war ich der Meinung, dass ein

Alter Table Tab1 Add Feld1 Char(1) +

Update Tab1 Set Feld1='1'

in einer Transaktion ausgeführt werden kann.

Nach
http://tracker.firebirdsql.org/browse/CORE-2512
geht aber ebend jenes nicht.

Weiss jemand darüber Bescheid ?

Danke


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Firebird: DDL und DML in einer Transaktion

  Alt 21. Jul 2010, 16:31
AFAIK kann DDL nur Oracle in einer speziellen Transaktionsart "verpacken".
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
tsteinmaurer

Registriert seit: 8. Sep 2008
Ort: Linz, Österreich
530 Beiträge
 
#3

AW: Firebird: DDL und DML in einer Transaktion

  Alt 21. Jul 2010, 17:47
Hallo Heiko,

richtig, DML und DDL sollten in einer Transaktion nicht vermischt werden. In Oracle stellt sich diese Frage gar nicht, weil DDL Statements automatisch committed werden, d.h. hier gibt es über ein Rollback kein zurück.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Firebird: DDL und DML in einer Transaktion

  Alt 22. Jul 2010, 07:09
Hallo,

wie kann ich dann aber eine Tabelle von einem "definierten Zustand"

Feld 1, Feld 2

nach

Feld 1, Feld 2, Feld 3 (Werte belegt)

ändern ?


Heiko
Heiko
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Firebird: DDL und DML in einer Transaktion

  Alt 22. Jul 2010, 07:12
Geht nur in 2 Schritten:
-Neues Feld anlegen
-Update
Markus Kinzler
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#6

AW: Firebird: DDL und DML in einer Transaktion

  Alt 22. Jul 2010, 07:25
Neue Tabelle anlegen (alle Spalten der alten Tabelle + neue Spalte)
Commit
Alte in neue Tabelle kopieren
Daten in neuer Spalte setzen
Commit
Alte Tabelle löschen und neue Tabelle umbenennen
Commit

Das geht allerdings nur, wenn das Löschen der alten Tabelle nicht durch Fremdschlüssel und dgl ausgeschlossen ist.


Alternative:
Den aktuellen Fortschritt der Transaktion in einer Hilfstabelle speichern. Wenn die Anwendung so kritisch ist, dass während der Änderung keinesfalls andere Prozesse auf die Tabelle zugreifen dürfen, könntest Du über Trigger und eine Environment Variable den Zugriff von anderen Prozessen auf die Tabelle zu verhindern, solange Deine Transaktion im Laufen ist.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Firebird: DDL und DML in einer Transaktion

  Alt 22. Jul 2010, 07:27
Eigentlich sollte es auch in der selben Tabelle gehen
Markus Kinzler
  Mit Zitat antworten Zitat
tsteinmaurer

Registriert seit: 8. Sep 2008
Ort: Linz, Österreich
530 Beiträge
 
#8

AW: Firebird: DDL und DML in einer Transaktion

  Alt 22. Jul 2010, 07:44
Hallo,

* Neues Feld anlegen (wenn NOT NULL, dann mit DEFAULT Definition)
* COMMIT
* Update ausführen
* COMMIT
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: Firebird: DDL und DML in einer Transaktion

  Alt 22. Jul 2010, 07:47
In Oracle stellt sich diese Frage gar nicht, weil DDL Statements automatisch committed werden, d.h. hier gibt es über ein Rollback kein zurück.
AFAIK kann man bei neueren Oracle's per Rollback DDL's zurücknehmen. Wurde AFAIK mal in einer Ausgabe von "Der Entwickler" beschrieben.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#10

AW: Firebird: DDL und DML in einer Transaktion

  Alt 23. Jul 2010, 09:30
Zitat:
Eigentlich sollte es auch in der selben Tabelle gehen
Zitat:
* Neues Feld anlegen (wenn NOT NULL, dann mit DEFAULT Definition)
* COMMIT
* Update ausführen
* COMMIT
Er spricht davon ,dass die Tabelle immer in einem definiertem Zustand bleiebn soll - Ich habe das so verstanden, dass er nicht will, dass man auf die Tabelle zugreifen kann, wenn die neue Spalte schon existiert, aber noch nicht die richtigen Werte drinnen stehen.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:57 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz