Announcement

Collapse
No announcement yet.

ORA-00979 Fehler beim Materialized View

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • ORA-00979 Fehler beim Materialized View

    Hallo Forum!

    Ich möchte ein Materialized View erstellen, der ON COMMIT refreshed wird.
    Der Code sieht so aus:
    Code:
    create MATERIALIZED VIEW tabelle_mview
    REFRESH FAST ON COMMIT
    as select
    COUNT(*) test, SDO_GID, 
    SDO_GEOMETRY(2001, null, null, SDO_ELEM_INFO_ARRAY(1,1,1), SDO_ORDINATE_ARRAY(SDO_X1,SDO_Y1))
    from tabelle_mview GROUP BY SDO_GID;
    Als Fehler erhalte ich "ORA-00979: not a GROUP BY expression"

    Weiß jemand Rat?
    Meine Vermutung ist, dass es etwas mit dem Objekttyp SDO_GEOMETRY zu tun hat!?

    Gruß
    HvG

  • #2
    Sobald du eine Gruppenfunktion [count(*)] verwendest, musst du nach alle anderen Felder die nicht über eine Gruppenfunktion (auch Funktionen) selektiert werden, gruppieren.

    Group by SDO_GID, SDO_GEOMETRY(2001, null, null, SDO_ELEM_INFO_ARRAY(1,1,1), SDO_ORDINATE_ARRAY(SDO_X1,SDO_Y1))

    bzw.

    Group by SDO_GID, SDO_X1,SDO_Y1

    sollte auch reichen.
    Wenn was schief gehen kann, dann geht es auch schief bzw. wenn man sich einen Fehler nicht erklären kann und dem nicht auf den Grund geht, hat das immer schlimme Folgen.

    Comment


    • #3
      Originally posted by HvG View Post
      ...
      Meine Vermutung ist, dass es etwas mit dem Objekttyp SDO_GEOMETRY zu tun hat!?...
      Nein, in einer gruppierten Abfrage müssen nur alle Werte der Select-Klausel, die keine Aggregatfunktionen sind ebenfalls in der Group by - Klausel aufgeführt werden.
      Also eigentlich [highlight=sql]
      ... GROUP BY SDO_GID,
      SDO_GEOMETRY(2001, null, null, SDO_ELEM_INFO_ARRAY(1,1,1), SDO_ORDINATE_ARRAY(SDO_X1,SDO_Y1))[/highlight]
      evtl ist auch das ausreichend:[highlight=sql]
      ... GROUP BY SDO_GID,
      SDO_X1,SDO_Y1[/highlight]

      Gruß Falk
      Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

      Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

      Comment


      • #4
        Da war ich wohl eine Sekunde schneller - aber die Lösungen sehen sich sehr ähnlich – dann wird wohl was richtiges dran sein
        Wenn was schief gehen kann, dann geht es auch schief bzw. wenn man sich einen Fehler nicht erklären kann und dem nicht auf den Grund geht, hat das immer schlimme Folgen.

        Comment


        • #5
          Originally posted by DiddlMouse View Post
          Da war ich wohl eine Sekunde schneller - ...
          Also sollte ich an meiner Tippgeschwindigkeit arbeiten oder mit dem Antworten warten wenn DiddlMouse online ist
          Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

          Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

          Comment


          • #6
            Hallo Leute!

            Danke für die Antworten!

            Ich hab´s mit beiden Möglichkeiten ausprobiert und erhalte jeweils folgende Fehlermeldung
            "ORA-12054: cannot set the ON COMMIT refresh attribute for the materialized view"

            Immerhin ein anderer Fehler

            Weiß jemand Rat?

            Gruß
            HvG

            Comment


            • #7
              Hallo,

              ich glaube das REFRESH ON COMMIT geht nur bei "einfachen" Replizierungen, also keine Joins, keine Gruppierung.

              gruß Falk
              Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

              Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

              Comment


              • #8
                Hallo Falk!

                Danke für die Antwort!
                Folgender Create Befehl enthält keine Gruppierungen oder Join´s. Ihm liegt nur eine einzige Basistabelle zugrunde.
                Trotzdem erhalte ich die Fehlermeldung "ORA-12054: cannot set the ON COMMIT refresh attribute for the materialized view".
                Code:
                create MATERIALIZED VIEW MVIEW (id, geom)
                REFRESH FAST ON COMMIT
                as select
                SDO_GID, 
                SDO_GEOMETRY(2001, null, null, SDO_ELEM_INFO_ARRAY(1,1,1), SDO_ORDINATE_ARRAY(SDO_X1,SDO_Y1))
                from tabelle;
                Gibt´s noch irgendwelche anderen Fehlerquellen?
                Kann es vielleicht doch am Objekttypen liegen?

                Gruß HvG

                Comment


                • #9
                  Oracle Doku:
                  To create a refresh-on-commit materialized view (ON COMMIT REFRESH clause), in addition to the preceding privileges, you must have the ON COMMIT REFRESH object privilege on any master tables that you do not own or you must have the ON COMMIT REFRESH system privilege.
                  Gruß Falk
                  Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

                  Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

                  Comment


                  • #10
                    OK Die Oracle Doku gibt Auskunft!

                    This clause is not supported for materialized views containing object types or Oracle-supplied types.
                    Freundliche Grüße
                    HvG

                    Comment

                    Working...
                    X