funny: Daten in View einfügen?

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

  1. Frage bezieht sich auf Oracle-Datenbanken, sollte es da Unterschiede geben.

    Danke und Gruß.

    1. 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

      1. 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

        --
        -------------------
        ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(
        1. 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

          --
          -------------------
          ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(
          1. -> 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

            1. 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

              --
              -------------------
              ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(
        2. 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

  2. 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