Announcement

Collapse
No announcement yet.

Statement als VIEW abbilden

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

  • Statement als VIEW abbilden

    Hallo,

    ich habe folgendes funktionierendes SQL Statement:

    Code:
    SELECT
        vkat1.rno,
        vkat1.nummer,
        vkat1.antwortcode,
        vkat1.id_fragebogen_kopf,
        vkat2.rno, 
        vkat2.nummer,
        vkat2.antwortcode,
        vkat2.id_fragebogen_kopf,
        vkat3.rno,
        vkat3.nummer,
        vkat3.antwortcode,
        vkat3.id_fragebogen_kopf,
        vkat4.rno,
        vkat4.nummer,
        vkat4.antwortcode,
        vkat4.id_fragebogen_kopf,
        vkat6.rno,
        vkat6.nummer,
        vkat6.antwortcode,
        vkat6.id_fragebogen_kopf
      FROM
        VIEW_FRAGEN_ANTWORTEN_KAT_6 vkat6
      full outer join
        VIEW_FRAGEN_ANTWORTEN_KAT_1 vkat1
      on
        vkat6.rno = vkat1.rno
      full outer join
        VIEW_FRAGEN_ANTWORTEN_KAT_2 vkat2
      on
        vkat6.rno = vkat2.rno
      full outer join
        VIEW_FRAGEN_ANTWORTEN_KAT_3 vkat3
      on
        vkat6.rno = vkat3.rno
      full outer join
        VIEW_FRAGEN_ANTWORTEN_KAT_4 vkat4
      on
        vkat6.rno = vkat4.rno
      order by
        vkat6.rno
    ;
    Wie kann ich dieses als VIEW abbilden. Ich habe es bereits versucht in dem ich einfach

    Code:
    CREATE OR REPLACE FORCE VIEW MEIN_VIEW as
    gesetzt habe. Leider kommt der mir nichts sagende Fehler (auch google half mir nicht):

    Code:
    Fehlerbericht:
    SQL-Fehler: ORA-00604: Fehler auf rekursiver SQL-Ebene 1
    ORA-00001: Unique Constraint (SYS.I_COL1) verletzt
    00604. 00000 -  "error occurred at recursive SQL level %s"
    *Cause:    An error occurred while processing a recursive SQL statement
               (a statement applying to internal dictionary tables).
    *Action:   If the situation described in the next error on the stack
               can be corrected, do so; otherwise contact Oracle Support.
    Habt ihr einen Tipp für mich?

    Danke lakul

  • #2
    Deine Full outer joins lesen sich etwas "intensiv".

    Versuch mal kleinere Häppchen und überleg mal, ob das so richtig umgesetzt ist.
    Gruß, defo

    Comment


    • #3
      Naja, es kommt bei der Abfrage genau das raus, was ich möchte, daher war ich der Meinung mein Code ist korrekt. Nur wenn ich halt ein view draus machen will klappts nicht.

      Comment


      • #4
        Ich hab nicht richtig aufgepasst, wenn das Select funktioniert, sollte auch der View funktionieren.
        Wie sind die Views aus der FROM Clause definiert, sind die unabhängig oder bauen die aufeinander auf?
        Welche DB Version ist es genau?
        Gruß, defo

        Comment


        • #5
          Guter Einwand. Vielleicht bringt uns folgendes Weiter:

          Laut dem Fehler

          Code:
          Fehler bei Befehlszeile:7 Spalte:10
          Fehlerbericht:
          SQL-Fehler: ORA-00604: Fehler auf rekursiver SQL-Ebene 1
          ORA-00001: Unique Constraint (SYS.I_COL1) verletzt
          00604. 00000 -  "error occurred at recursive SQL level %s"
          *Cause:    An error occurred while processing a recursive SQL statement
                     (a statement applying to internal dictionary tables).
          *Action:   If the situation described in the next error on the stack
                     can be corrected, do so; otherwise contact Oracle Support.
          den ich bei Erstellung des VIEWS erhalte, ist ja (ab) Zeile 7 der Fehler zu suchen

          Code:
          vkat2.rno,
          Demnach ist vermutlich der erste VIEW "VIEW_FRAGEN_ANTWORTEN_KAT_1" in Ordnung. Dieser sieht so aus:

          Code:
          CREATE OR REPLACE FORCE VIEW VIEW_FRAGEN_ANTWORTEN_KAT_1 AS
            SELECT ff.nummer -
              (SELECT MIN(nummer) FROM fragebogen_fragen WHERE id_k_kategorie = 1
              ) + 1 rno,
              ff.id_fragebogen_fragen,
              ff.fragentext,
              fa.antworttext,
              ff.id_k_kategorie,
              ff.id_fragebogen_kopf,
              ff.id_k_frage,
              ff.nummer,
              fa.antwortcode
            FROM fragebogen_fragen ff,
              fragebogen_antworten fa
            WHERE ff.id_fragebogen_fragen = fa.id_frage
            AND fa.ist_gewaehlt          IS NOT NULL
            AND ff.id_k_kategorie         = 1
            ORDER BY ff.nummer;
          Der VIEW "VIEW_FRAGEN_ANTWORTEN_KAT_2" hingegen sieht so aus:

          Code:
          CREATE OR REPLACE FORCE VIEW VIEW_FRAGEN_ANTWORTEN_KAT_2 AS
            SELECT ROWNUM rno,
              ff.id_fragebogen_fragen,
              ff.fragentext,
              fa.antworttext,
              ff.id_k_kategorie,
              ff.id_fragebogen_kopf,
              ff.id_k_frage,
              ff.nummer,
              fa.antwortcode
            FROM fragebogen_fragen ff,
              fragebogen_antworten fa
            WHERE ff.id_fragebogen_fragen = fa.id_frage
            AND fa.ist_gewaehlt          IS NOT NULL
            AND ff.id_k_kategorie         = 2
            ORDER BY ff.nummer;
          Beide VIEWS funktionieren, die restlichen VIEWS sind analog zu VIEW "VIEW_FRAGEN_ANTWORTEN_KAT_2". Weiterhin wäre auch nicht erklärt warum der normale SELECT klappt, sobald ich aber einen VIEW daraus machen, gehts nicht mehr.

          DANKE!!

          Comment


          • #6
            Oh man, das ist aber auch wieder deppert.
            Dein neuer View enthält identische Spaltennamen. Normalerweise gibts dafür ne extra Fehlermeldung. Keine Ahnung, warum hier nicht.
            Also Spaltenalias vergeben , damit Du eindeutige Spaltennamen im View hast.

            Im reinen Select Statement ist Oracle so gnädig, identische Spaltennamen zu erlauben. Geht natürlich nicht im View. Das ist eine der Ausnahmen, wo funktionierendes Select!= funktionierender View ist.
            Gruß, defo

            Comment


            • #7
              Oh man, ja, danke, wie dumm, hab ich eiskalt ignoriert.
              Jetzt klappt es, DANKE!!!

              Comment

              Working...
              X