AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

updateable views

Ein Thema von Hansa · begonnen am 5. Nov 2003 · letzter Beitrag vom 6. Nov 2003
Antwort Antwort
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#1

updateable views

  Alt 5. Nov 2003, 23:17
Hi,

ein View ist ja im Prinzip nichts anderes, als eine temporäre table, die die Basistabellen abbildet. Daß diese, so wie teilweise behauptet wird, nur eine spezielle Sicht auf die Daten ist, stimmt offensichtlich so auch nicht. Angeblich kann man da auch UPDATES oder INSERTS drauf machen. Hat einer so was schon mal gemacht ??? Es soll über Trigger laufen und ein (Zitat Borland) : "handy feature" von Interbase sein.
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.606 Beiträge
 
#2

Re: updateable views

  Alt 6. Nov 2003, 07:01
Views lassen sich nicht nur mit IB realisieren sondern auch mit gängigen anderen DBMS wie MS SQL Server / MSDE und auch Oracle.

Eine View ist vor allem dann nützlich, wenn man sehr häufig bestimmte Joins verwenden muss. Diese Joins werden dann nicht jedesmal komplett ausgeführt (manche DBMS brauchen da schon ne Weile für ) sondern diese 'Sicht' auf die Daten wird gecached.

Sofern der View einen (oder mehrere) inner Joins verwendet kannst Du freilich auch Updates darauf machen. Bei outer Joins klappt das logischerweise nicht mehr.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Benutzerbild von Garby
Garby

Registriert seit: 17. Mär 2003
Ort: Tirol
199 Beiträge
 
Delphi 2005 Professional
 
#3

Re: updateable views

  Alt 6. Nov 2003, 09:27
Hallo,

im Prinzip kann man einen View nur updaten, wenn nur eine Tabelle abgefragt wird.
In Oracle kann man dieses Verhalten mit einem "instead of" Trigger umgehen. D.h. der Trigger wird statt mitCreate or Replace Trigger TRIGGER_NAME before Insert on TABELLE mit Create or Replace Trigger TRIGGER_NAME instead of Insert on VIEW erzeugt.
In diesem Trigger kann man die Anweisungen dann auf die einzelnen Tabellen aufteilen.
In IB 6.0 ist das meines Wissens nicht möglich, vielleicht aber in der neuesten Version von Borland.
Walter
Wenn zwei dasselbe tun, ist es noch lange nicht dasselbe
(Adelphi)
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#4

Re: updateable views

  Alt 6. Nov 2003, 11:45
Zitat von Garby:
im Prinzip kann man einen View nur updaten, wenn nur eine Tabelle abgefragt wird...
Die behaupten aber steif und fest, daß auch ein insert/updae nicht auf eine Tabelle beschränkt ist ! Sofern man Trigger benutzt. Und die btroffenen Spalten dürfen nicht als NOT NULL definiert sein. Hier das Borland Beispiel:

SQL-Code:
CREATE TABLE Table1 (
    ColA INTEGER NOT NULL,
    ColB VARCHAR(20),
    CONSTRAINT pk_table PRIMARY KEY(ColA)
);
CREATE TABLE Table2 (
    ColA INTEGER NOT NULL,
    ColC VARCHAR(20),
    CONSTRAINT fk_table2 FOREIGN KEY REFERENCES Table1(ColA)
);
CREATE VIEW TableView AS
    SELECT Table1.ColA, Table1.ColB, Table2.ColC
    FROM Table1, Table2
WHERE Table1.ColA = Table2.ColA;

CREATE TRIGGER TableView_Delete FOR TableView BEFORE DELETE AS
BEGIN
  DELETE FROM Table1
  WHERE ColA = OLD.ColA;
  DELETE FROM Table2
  WHERE ColA = OLD.ColA;
END;

CREATE TRIGGER TableView_Update FOR TableView BEFORE UPDATE AS
BEGIN
  UPDATE Table1
  SET ColB = NEW.ColB
  WHERE ColA = OLD.ColA;
  UPDATE Table2
  SET ColC = NEW.ColC
  WHERE ColA = OLD.ColA;
END;

CREATE TRIGGER TableView_Insert FOR TableView BEFORE INSERT AS
BEGIN
  INSERT INTO Table1 values (NEW.ColA,NEW.ColB);
  INSERT INTO Table2 values (NEW.ColA,NEW.ColC);
END;
Nur was wird da genau jetzt gemacht
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von Garby
Garby

Registriert seit: 17. Mär 2003
Ort: Tirol
199 Beiträge
 
Delphi 2005 Professional
 
#5

Re: updateable views

  Alt 6. Nov 2003, 12:07
Das ist eigentlich identisch wie in meinem Beispiel von Oracle, ausser dass man keinen eigenen Triggertyp benötigt.
Das ist natürlich OK wenn man nur Updates oder Deletes macht. Beim Insert kannst du immer nur Datensätze in beiden Tabellen gleichzeitig anlegen. Da nützt dir die 1:n Beziehung nichts mehr.

Was da passiert? In den Triggern für den View werden die entsprechenden Anweisungen für die beiden Tabellen separat ausgeführt. Das ist eigentlich alles.
Walter
Wenn zwei dasselbe tun, ist es noch lange nicht dasselbe
(Adelphi)
  Mit Zitat antworten Zitat
Antwort Antwort


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 18:34 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