Daten in View einfügen?
funny
- datenbank
0 funny0 Vinzenz Mai
Hallo, ich hatte folgende Aufgabenstellung.
create or replace view MyView1 as select d.jahr, d.monat, d.vertreter, v.Name, d.Umsatz from datenhaufen d, vertreter v where d.jahr = 1992 and d.vertreter = v.VertID and V.VertID <10 order by d.monat;
Geben Sie einen Befehl an, der einen neuen Vertreter in die View einfügt? Geht das? Geben Sie eine Begründung an.
Meine Frage stützt sich auf letzteres. Ist es möglich einen neuen Vertreter in die View einzufügen. Meines Erachtens ja, da die View nicht schreibgeschützt ist. Was sagt Ihr?
Für jede Hilfe dankbar.
Gruß. funny
Frage bezieht sich auf Oracle-Datenbanken, sollte es da Unterschiede geben.
Danke und Gruß.
Hallo
Frage bezieht sich auf Oracle-Datenbanken, sollte es da Unterschiede geben.
ja es gibt Unterschiede, Beispiele:
MySQL 5.0.x kann es nicht. MS Access kann es.
Was Oracle betrifft, so habe ich derzeit keinen Zugriff auf die Dokumentation.
Freundliche Grüße
Vinzenz
Hi,
Was Oracle betrifft, so habe ich derzeit keinen Zugriff auf die Dokumentation.
Damn, dann sind wir schon zwei. Also es gibt in Oracle "materialized views", die kann man anlegen wenn man beim CREATE das entsprechende Schlüsselwort angibt. Ob das auch automatisch passiert weiß ich nicht, aber ich suche mal weiter...
MfG
Rouven
Man man man, das ist ja so unglaublich, jetzt muss ich mich bei dem S******verein tatsächlich registrieren - na gut, schlussendlich:
-----------
An updatable join view (also referred to as a modifiable join view) is a view that contains more than one table in the top-level FROM clause of the SELECT statement, and is not restricted by the WITH READ ONLY clause.
The rules for updatable join views are shown in the following table. Views that meet these criteria are said to be inherently updatable.
Rule Description
General Rule Any INSERT, UPDATE, or DELETE operation on a join view can modify only one underlying base table at a time.
UPDATE Rule All updatable columns of a join view must map to columns of a key-preserved table. See "Key-Preserved Tables" for a discussion of key-preserved tables. If the view is defined with the WITH CHECK OPTION clause, then all join columns and all columns of repeated tables are not updatable.
DELETE Rule Rows from a join view can be deleted as long as there is exactly one key-preserved table in the join. The key preserved table can be repeated in the FROM clause. If the view is defined with the WITH CHECK OPTION clause and the key preserved table is repeated, then the rows cannot be deleted from the view.
INSERT Rule An INSERT statement must not explicitly or implicitly refer to the columns of a non-key-preserved table. If the join view is defined with the WITH CHECK OPTION clause, INSERT statements are not permitted.
---------
-> Fazit: Ja, geht, aber es (1) darf nur eine Tabelle einbezogen werden und (2) muss der View den Primärschlüssel enthalten (sprich: beim Insert muss der Primärschlüssel befüllt werden, sei es durch explizites Setzen oder automatische Generierung) und (3) dürfen keine FOREIGN-KEY-Beziehungen verletzt werden.
MfG
Rouven
-> Fazit: Ja, geht, aber es (1) darf nur eine Tabelle einbezogen werden und (2) muss der View den Primärschlüssel enthalten (sprich: beim Insert muss der Primärschlüssel befüllt werden, sei es durch explizites Setzen oder automatische Generierung) und (3) dürfen keine FOREIGN-KEY-Beziehungen verletzt werden.
MfG
Rouven
Hi Rouven,
für diese View würde es also nicht gelten, da diese auf zwei Tabellen beruht? :(
create or replace view MyView1 as select d.jahr, d.monat, d.vertreter, v.Name, d.Umsatz from datenhaufen d, vertreter v where d.jahr = 1992 and d.vertreter = v.VertID and V.VertID <10 order by d.monat;
Gruß. funny
Hi,
für diese View würde es also nicht gelten, da diese auf zwei Tabellen beruht? :(
na ja, da kann man drüber streiten. Ich lese das so: Das Handbuch ging genau um Views, die auf mehreren Tabellen beruhen. Die Einschränkung gilt für das INSERT - DAS darf nur auf einer Tabelle arbeiten, in deinem Fall auf der Tabelle Vertreter. Es darf _nicht_ in Vertreter und Datenhaufen gleichzeitig was einfügen. Es geht auch in dem Moment schief, wo nach dem INSERT ein FOREIGN KEY ungültig ist. Da der FOREIGN KEY aber scheinbar von Datenhaufen nach Vertreter geht und nicht umgekehrt, dürfte auch das kein Problem sein. Die einzige Frage wäre damit: Enthält der View den Primärschlüssel der Vertreter-Tabelle bzw. was ist eigentlich der Primärschlüssel der Vertreter-Tabelle. Wenn cih die Definition richtig deute müsste das ja VertID sein, die ist als solce in der Vertreter-Tabelle nicht drin. Wenn das also kein AutoWert (oder vergleichbar) ist, dann könnte das INSERT in der Tat daran scheitern.
MfG
Rouven
Hi,
Was Oracle betrifft, so habe ich derzeit keinen Zugriff auf die Dokumentation.
Damn, dann sind wir schon zwei. Also es gibt in Oracle "materialized views", die kann man anlegen wenn man beim CREATE das entsprechende Schlüsselwort angibt. Ob das auch automatisch passiert weiß ich nicht, aber ich suche mal weiter...MfG
Rouven
Habe mal etwas gesucht und bin nicht sicher ob das hier zutrifft.
Laut meinen Oracle-Folien wird folgendes gesagt, trifft das dann hier zu, d.h. können Daten eingefügt werden.
DML-Operationen für eine View durchführen
Sie können keine Daten über eine View hinzufügen,
wenn sie eines der folgenden Elemente enthält:
Gruppenfunktionen
Eine GROUP BY-Klausel
Das Schlüsselwort DISTINCT
Das Pseudospalten-Schlüsselwort ROWNUM
Spalten, die durch Ausdrücke definiert sind
NOT NULL-Spalten in den Basistabellen, die nicht für die View selektiert wurden
Sie können Daten über eine View hinzufügen, wenn sie keines der auf der Folie genannten Elemente enthält und die Basistabelle keine NOT NULL-Spalten ohne Default-Werte enthält, die nicht für die View selektiert wurden. Alle benötigten Werte müssen in der View enthalten sein. Bedenken Sie, dass Sie Werte über die View direkt der zugrunde liegenden Tabelle hinzufügen.
Weitere Informationen finden Sie in Oracle9i SQL Reference, "CREATE VIEW".
Hoffe, das hilft euch weiter und dann hoffentlich eine positive Antwort (war nämlich eine Klausurfrage, die entscheidend für das Bestehen oder Nichtbestehen sein könnte).
Gruß. funny
Hallo,
create or replace view MyView1 as select d.jahr, d.monat, d.vertreter, v.Name, d.Umsatz from datenhaufen d, vertreter v where d.jahr = 1992 and d.vertreter = v.VertID and V.VertID <10 order by d.monat;
ein unschönes Statement.
Geben Sie einen Befehl an, der einen neuen Vertreter in die View einfügt?
den gibt es nicht.
Geht das?
Nein.
Geben Sie eine Begründung an.
Lies den betreffenden Abschnitt im Handbuch.
Meine Frage stützt sich auf letzteres. Ist es möglich einen neuen Vertreter in die View einzufügen. Meines Erachtens ja, da die View nicht schreibgeschützt ist. Was sagt Ihr?
Warum hast Du nicht im Handbuch nachgeschaut?
Freundliche Grüße
Vinzenz