Re: auto increment on Oracle table
Klar funktioniert das. Aber eben nur in Scriptcase. Wenn Deine datenbank mal von einem anderen frontend bedient werden soll, klappts eben nicht mehr. Wenn du alos bspw. Mit einer ASP Seite da ran willst und dort einen neuen Datensatz speichern m?chtest, musst Du auch dort erst den aktuellen squencewert holen und in das Insert-Statement einbauen.
In Oracle mache ich das f?r jede Tabelle so:
CREATE TABLE t_tabellenname (…)
CREATE SEQUENCE seq_tabellenname… liefert den Wert f?r den Primary Key
CREATE OR REPLACE VIEW v_tabellenname
CREATE TRIGGER trgv_tabellenname_eventtyp auf den Tabellenview
CREATE TRIGGER trg_tabllenname_eventtyp eventtyp =(bins, ins, bupd, upd, bdel, del) bins ist BEFORE INSERT, ins AFTER INSERT
In den Frontends, die ich entwickle arbeite ich grunds?tzlich mit den Views. das bringt ein paar nachteile wie z.B. f?r jeden View ein Trigger usw.
Aber auch m.M. nach ein paar Vorteile. Der Tabellentrigger BEFORE INSERT k?mmert sich im Wesentlichen um den neuen Wert des PK.
Der Viewtrigger K?mmert sich um alles was bei dem View gemacht werden muss um Daten zu manipulieren. In JOIN Views oder solche, die Stored Functions verwenden kann man sowieso keine direkten DML Statements absetzen, da muss dann ohnehin ein Trigger her.
Views sind prima geeignet, um Datenbank- und Frontendseite voneinander abzukoppeln. Ich meine damit folgendes: Ich ?ndere die Stuktur einer Tabelle. Neue Spalte(n), ?ndern Spaltenname Spalte1 -> Spalte2 o.?. Damit geht ab sofort jedes direkte Insert-Statement in der Form INSERT INTO ( Spalte1 ) … schief. Nicht so, wenn man mit Views arbeitet. Durch ?nderung des Views (Select SPALTE2 AS SPALTE1) spart man sich die ?nderung des Frontends, da dort ja immernoch SPALTE1 erwartet wird. Klappt nat?rlich nur wenn der Spaltentyp gleich bleibt.
Wie auch immer, ich verfolge immer die Strategie, das ein einfach gestrickter DML - Befehl klappen muss ohne das der absender sich um irgendwelche Werte wie PK-Values k?mmern muss, das muss das DBMS machen.
Schlussendlich vereinfacht das auch die Entwicklung in SC, da sie Insertstatements auch auf Joined Views immer klappen und man, anders als bei MySQL, keine Stored Procedures braucht. Bei MySQL gibt es ja leider auch keine Trigger f?r Views.