Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi ALTER TABLE ... CHANGE bei Interbase? (https://www.delphipraxis.net/57623-alter-table-change-bei-interbase.html)

vsti 24. Nov 2005 09:43

Datenbank: Interbase • Version: 6 • Zugriff über: SQLConnection / SQLQuery

ALTER TABLE ... CHANGE bei Interbase?
 
Tach DP,

bei meiner Interbase Datenbank gibt es anscheinend das CHANGE Statement nicht, also z.B.

SQL-Code:
ALTER TABLE 'TEST_TABLE' CHANGE 'TEST_FIELD' 'TEST_FIELD1' VARCHAR(10)
Wie ich gelesen habe ist das eine Eigenschaft von MySQL...

Hintergrund ist der, dass ich Feldeigenschaften ändern möchte, ohne dass der Inhalt der Spalte verloren geht.

Gibt es in Interbase eine Alternative dazu?
Oder kann man sowas nachträglich als Prozedur in die Datenbank einfügen?

dfried 24. Nov 2005 10:23

Re: ALTER TABLE ... CHANGE bei Interbase?
 
Interbase kenn ich jetzt auch nicht so gut, aber unter ORACLE würde das statt Change MODIFY heissen.
Wobei du glauch ich grundätzlich zwischen Verändern und umbenennen unterscheiden muesstest. Das ändern des Datentyps müsstest du über das MODIFY machen, das umbenennen vermutlich über RENAME.

mschaefer 24. Nov 2005 10:27

Re: ALTER TABLE ... CHANGE bei Interbase?
 
Moin, moin,

also es ist in FB/IB etwas leidlich gelöst, denn es geht meines Wissens nach nur über die Systemtabellen, wie in der Art:

SQL-Code:
update RDB$FIELDS set
RDB$FIELD_TYPE = 14,
RDB$COLLATION_ID = 0
where RDB$FIELD_NAME = 'RDB$15'
Würde Dir raten: Verwende IB-Expert und ändere das im Dialogverfahren. Das Programm generiert die entsprechenden SQL-Befehle und fragt Dich dann nach der Bestätigung. So durchsichtig wie bei Oracle ist das leider nicht.

Grüße // Martin

dataspider 24. Nov 2005 10:31

Re: ALTER TABLE ... CHANGE bei Interbase?
 
Hi,
das Umbenennen geht mit:
SQL-Code:
ALTER TABLE MEINETABELLE ALTER FELDA TO FELDB
Weird die Struktur geändert, ist das sehr kompliziert, wenn ohne Domains gearbeitet wurde.
Hast du Domains, geht es wie folgt:
SQL-Code:
update RDB$RELATION_FIELDS set
RDB$FIELD_SOURCE = 'NEUER_DOMAINNAME'
where (RDB$FIELD_NAME = 'FELDNAME') and
(RDB$RELATION_NAME = 'MEINETABELLE')
Gruß, Frank

vsti 24. Nov 2005 10:40

Re: ALTER TABLE ... CHANGE bei Interbase?
 
Klasse @mschaefer,

ich arbeite sowieso ziemlich nahe an den Systemtabellen. ich versuche einfach mal die Feldlänge mit

SQL-Code:
update RDB$FIELDS set
RDB$FIELD_LENGTH = 10
where RDB$FIELD_NAME = 'RDB$15'
zu ändern. Wenn das geht, bin ich alle Sorgen los :thumb:

THX

marabu 24. Nov 2005 11:28

Re: ALTER TABLE ... CHANGE bei Interbase?
 
Hallo vsti.

Deine SQL-Zeile aus dem opener wird in Interbase SQL in zwei Statements gepackt:

SQL-Code:
ALTER TABLE 'TEST_TABLE' ALTER COLUMN 'TEST_FIELD' TO 'TEST_FIELD1'

ALTER TABLE 'TEST_TABLE' ALTER COLUMN 'TEST_FIELD1' TYPE VARCHAR(10)
Grüße vom marabu

vsti 24. Nov 2005 11:39

Re: ALTER TABLE ... CHANGE bei Interbase?
 
Hm, klingt logisch,

beim Testen deiner Anweisung ergibt sich allerdings die Meldung "ungülige Änderung".

Interbase hat wohl was dagegen die Feldeigenschaften zu ändern :gruebel:

Aber die Lösung von mschaefer hab ich grade erfolgreich testen können :) :cheers:

marabu 24. Nov 2005 12:54

Re: ALTER TABLE ... CHANGE bei Interbase?
 
Bei Verwendung von ALTER TABLE werden jede Menge Konsistenzprüfungen nebenbei erledigt. So ist es auf diese Weise nicht möglich Felder umzubenennen, die in einer CONTRAINT Klausel verbaut wurden. Beim direkten Ändern der Systemtabellen werden diese Prüfungen zumindest nicht alle durchgeführt. Ich würde grundsätzlich nur dann mit den System-Tabellen arbeiten, wenn es keine Standard-SQL Lösung für meine Anforderung gibt. Ohne ein vollständiges Verständnis der System-Objekte begibst du dich da auf sehr dünnes Eis. Ich vermute, dass die von dir direkt vorgenommene Änderung in der System-Tabelle bereits einen inkonsistenten Zustand geschaffen hat - warum sonst hätte der ALTER Befehl die Warnglocken geläutet?

Nachdenkliche Grüße vom marabu

vsti 24. Nov 2005 19:32

Re: ALTER TABLE ... CHANGE bei Interbase?
 
Hm, jetzt machst du mich auch nachdenklich ^^

Tja, das Problem ist ich MUSS es irgendwie hinbekommen... die Änderung via Systemtabellen hat soweit funktioniert. Wenn es wie du sagst aber zu Inkonsistenzen mit evtl. schwerwiedenden Problemen kommen kann, dann steh ich wieder am Anfang...

Ich werde es in einer Testdatenbank in verschiedenen Tabellen durchtesten und damit arbeiten, wenn sich dann keine Probleme ergeben, erachte ich das Problem als gelöst :)

Vielen Dank für Deine Hinweise...

Hansa 24. Nov 2005 19:38

Re: ALTER TABLE ... CHANGE bei Interbase?
 
Marabu denkt eben weiter. :mrgreen: Wenn IBExpert schon meckert, dann ist echt Vorsicht geboten. Bei so was gilt immer : im Zweifelsfalle Tabelle neu aufbauen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:37 Uhr.
Seite 1 von 2  1 2      

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