Announcement

Collapse
No announcement yet.

wer kann folgendes Script erweitern?

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

  • #16
    Originally posted by AndreaK View Post
    ...Wie bekomme ich es hin, das mir nur die MNR - Felder mit dem Inhalt "FR%"
    angezeigt bekomme.
    Hallo Andrea,

    dazu mußt du noch eine zusätzliche WHERE-Bedingung einbauen. Diese muß dann vor das CONNECT BY, also:
    [highlight=sql]
    SELECT rab.rlnr,
    rab.mnr,
    rab.saint,
    rab.tr
    FROM (
    SELECT * FROM relab
    WHERE rlnr != mnr
    AND saint != 65) rab
    WHERE rab.mnr like 'FR%'
    CONNECT BY PRIOR rab.mnr = rab.rlnr
    START WITH rab.rlnr >= '603102296' AND
    rab.rlnr <= '603102298'
    ORDER BY rab.rlnr DESC, mnr DESC
    [/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


    • #17
      Danke !

      Hallo Falk,
      genau das was ich eigentlich wollte.
      Leider ist mir ein Fehler unterlaufen.
      Bei den Test-Daten mit nur einer oder zwei Nummern kann man das ganze noch auseinander halten.
      Wenn der Nr'n - Kreis aber über ca. 20.000 Datensätze geht, fehlt mir die Zuordnung über die RLNR.

      so sieht es jetzt aus:

      RLNR MNR SAINT TR
      603102296 FR600000 60 5
      583102296 FR300000 60 5
      563102296 FR100100 60 5

      so müsste es aussehen:

      RLNR MNR1 MNR2 SAINT TR
      603102296 603102296 FR600000 60 5
      603102296 583102296 FR300000 60 5
      603102296 563102296 FR100100 60 5

      Kann man das Script so erweitern?
      Wahrscheinlich sind hier die Grenzen von SQL erreicht.
      Mach dir nicht mehr so viele Gedanken, du hast schon viel Zeit in dieses Problem gesteckt.
      Ich werde sonst das erste Script von dir nehmen,
      ( ohne "WHERE rab.mnr LIKE 'FR%' " )
      den Nr.'n Kreis etwas kleiner wählen und dann die MNr mit dem Inhalt "FR%" mit Excel rausfiltern.

      Liebe Grüsse
      Andrea

      Comment


      • #18
        Hallo Andrea ,

        Originally posted by AndreaK View Post
        ...Kann man das Script so erweitern?
        Wahrscheinlich sind hier die Grenzen von SQL erreicht.
        Man kann! Und das SQL von Oracle ist sehr mächtig
        [highlight=sql]
        select distinct ab1.rlnr, ab2.rlnr mnr1, ab2.mnr mnr2, ab2.saint, ab2.tr
        from relab ab1,
        relab ab2
        where (ab2.rlnr, ab2.mnr) in
        (SELECT rab.rlnr, rab.mnr
        FROM (
        SELECT * FROM relab
        WHERE rlnr != mnr
        AND saint != 65) rab
        CONNECT BY PRIOR rab.mnr = rab.rlnr
        START WITH rab.rlnr = ab1.mnr)
        and ab2.mnr LIKE 'FR%'
        and ab1.rlnr between '603102296' and '603102298'
        ORDER BY ab1.rlnr DESC, ab2.rlnr DESC
        [/highlight]
        Obwohl ich mir jetzt mit den ganzen mnr und rlnr nicht mehr sicher bin , mit deinen Testdaten und für die konkrete Aufgabe kommt aber das gewünschte Ergebnis raus.

        Originally posted by AndreaK View Post
        Mach dir nicht mehr so viele Gedanken, du hast schon viel Zeit in dieses Problem gesteckt.
        Ich habe mich schon sehr viel Zeit mit solchen hierarchischen Abfragen beschäftigt, so daß zumindest die Lösungsansätze ohne große Probleme abrufbar sind

        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


        • #19
          Danke !

          Hallo Falk,
          ich bin begeistert.
          Es funktioniert unter SQL*Plus: Release 8.1.7.0.0
          Alledings beträgt die Laufzeit ca. 5 Min. für den Nr.'-Kreis 603102296 bis 603102298
          Wenn ich das Script unter MS Query laufen lasse, kommt für ungefähr 15 sek. die Sanduhr und danach bricht das Programm ab.
          Ich habe jetzt den Nr.'n - Kreis erweitert und lasse den Script übers Wochenende laufen. (unter SQL*Plus am Server)
          Mal sehen was dabei raus kommt.
          Kann man noch etwas machen um die Laufzeit zu verkürzen?

          Liebe Grüsse
          Andrea

          Comment


          • #20
            Originally posted by AndreaK View Post
            ...Kann man noch etwas machen um die Laufzeit zu verkürzen?
            Hallo Andrea,

            naja das Übliche, passende Indizes anlegen, ...
            Also je ein Index auf die Felder rlnr, und mnr sollte schon was bringen...

            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


            • #21
              Hallo Falk,
              ich kann mich erst am Montag wieder melden.
              Ich wünsche dir ein schönes Wochenende.
              Bis dann.

              Liebe Grüsse

              Andrea

              Comment


              • #22
                Hallo Falk,
                ich hoffe du hattest ein schönes Wochenende.
                Eine Frage hätte ich noch zu deinem letzten Script.
                Wenn ich direkt mit SQL*Plus auf die Oracle-Datenbank gehe, läuft es ja ziemlich lange.
                Ich habe die Daten zusätzlich noch in einer Access-Datenbank zur Verfügung.
                Die Feldbezeichnungen sind identisch.
                Kommt dein Script auch mit der Access-Datenbank klar, oder muss es dafür komplett umgeschrieben werden?
                Oder funktioniert es überhaupt damit nicht?
                Ich habe von Datenbanken und deren Aufbau leider nicht viel Ahnung, deshalb die für dich wahrscheinlich "dumme" Fragen.

                Liebe Grüsse
                Andrea

                Comment


                • #23
                  Originally posted by AndreaK View Post
                  Hallo Falk,
                  ich hoffe du hattest ein schönes Wochenende.
                  Danke der Nachfrage, war schön und wie immer zu kurz Hoffe auf das gleiche bei dir.
                  Originally posted by AndreaK View Post
                  Eine Frage hätte ich noch zu deinem letzten Script.
                  Wenn ich direkt mit SQL*Plus auf die Oracle-Datenbank gehe, läuft es ja ziemlich lange.
                  Wie schon am Freitag angedeutet, sollte sich hier mit Optimierung noch was machen lassen.
                  Originally posted by AndreaK View Post
                  Ich habe die Daten zusätzlich noch in einer Access-Datenbank zur Verfügung.
                  Die Feldbezeichnungen sind identisch.
                  Kommt dein Script auch mit der Access-Datenbank klar, oder muss es dafür komplett umgeschrieben werden?
                  Ich kann mir nicht vorstellen das in Access hirarchische Abfragen unterstützt werden. Und selbst wenn das so sein sollte, kann ich mir noch sehr viel weniger, also eigentlich überhaupt nicht vorstellen das dies dann schneller ist als auf einem Oracle-Server. (Ist Access überhaupt eine Datenbank? *gg*)
                  Ich würde also ziemlich sicher auf:
                  Originally posted by AndreaK View Post
                  Oder funktioniert es überhaupt damit nicht?
                  tippen.

                  Ich würde einfach mal folgendes in Oracle probieren:
                  [highlight=sql]
                  create index testindx on relab (rlnr);
                  create index testindx2 on relab (mnr);
                  analyze table relab compute statistics for table;
                  analyze table relab compute statistics for all indexes;
                  [/highlight]
                  Und dann mal prüfen, wie sich das Laufzeitverhalten der Abfrage verändert, ggfs. die Abfrage um einen Hint ergänzen, z.B.:
                  [highlight=sql]
                  SELECT /*+ FIRST_ROWS */ DISTINCT ab1.rlnr, ab2.rlnr mnr1, ab2.mnr mnr2, ab2.saint, ab2.tr
                  ...
                  [/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


                  • #24
                    Hallo Falk,
                    vielen Dank für deine schnelle Antwort.
                    Ich habe es ausprobiert und ich glaube auch das sich das Laufzeitverhalten verbessert hat.
                    Bleibt der index jetzt für immer bestehen oder muss ich beim erneuten connect auf die Datenbank auch den index neu setzen?
                    Kann man das Script so erweitern, das man die selektierten Daten in eine Datei geschrieben bekommt, (mit ";" als Trennzeichen) um sie dann mit Excel
                    weiter zu bearbeiten?

                    Liebe Grüsse
                    Andrea

                    Comment


                    • #25
                      Hallo Andrea,

                      Die angelegten Indizes bleiben natürlich bestehen, solange sie nicht explizit mit "DROP INDEX ..." oder die gesamte Tabelle gelöscht werden.

                      Mit SQL*Plus kannst du die Daten mit "SPOOL DateiName" in eine Datei deiner Wahl schreiben lassen.
                      z.B.
                      set feedback off
                      set heading off
                      set pagesize 0
                      spool c:\daten\sql\relabsel.txt
                      select SELECT /*+ FIRST_ROWS */ DISTINCT ab1.rlnr || ';' || ab2.rlnr || ';' || ab2.mnr || ';' || ab2.saint || ';' || ab2.tr
                      ...
                      spool off

                      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


                      • #26
                        Hallo Falk,
                        es hat geklappt.
                        Ich möchte mich noch mal recht herzlich für deine Unterstützung in den letzten Tagen bedanken.
                        Es hat mir Spaß gemacht und ich habe auch noch was dazu gelernt.
                        Vielen Dank.
                        Dann bis zum nächsten Mal in diesem Forum.

                        Liebe Grüsse
                        Andrea

                        Comment


                        • #27
                          Hallo Falk,
                          ich habe mich noch mal mit deinen SQL-Scripten der vergangenen Woche befasst.
                          Folgendes Script liefert mir 23 Ergebnisse:

                          SELECT rab.rlnr, rab.mnr, rab.saint, rab.tr
                          FROM (SELECT * FROM relab
                          WHERE rlnr != mnr) rab
                          CONNECT BY PRIOR rab.mnr = rab.rlnr
                          START WITH rab.rlnr >= '603102296' AND rab.rlnr <= '603102296'
                          ORDER BY rab.rlnr

                          (siehe Anlage1.zip)

                          Wenn ich nun das 2 Script laufen lasse, bekomme ich nur 22 Ergebnisse angezeigt.
                          Hier wird der AP73185 der 2x vorhanden ist ,- nur 1x ausgegeben.

                          SELECT /*+ FIRST_ROWS */ DISTINCT ab1.rlnr, ab2.rlnr mnr1, ab2.mnr mnr2, ab2.tr
                          FROM relab ab1, relab ab2
                          WHERE (ab2.rlnr, ab2.mnr)
                          IN (SELECT rab.rlnr, rab.mnr FROM (SELECT * FROM relab WHERE rlnr != mnr) rab
                          CONNECT BY PRIOR rab.mnr = rab.rlnr
                          START WITH rab.rlnr = ab1.mnr)
                          AND ab1.rlnr BETWEEN '603102296' AND '603102296'
                          ORDER BY ab1.rlnr DESC, ab2.rlnr DESC

                          (siehe Anlage2.zip)

                          Wenn du noch Lust hast, könntest du evtl. nach dem Fehler schauen?

                          Die Testdaten liegen bei.
                          (siehe Anlage3.zip)

                          Vielen Dank im voraus.

                          Liebe Grüsse

                          Andrea
                          Attached Files

                          Comment


                          • #28
                            Hallo Andrea,

                            da hab ich mich wohl ein wenig mit dem DISTINCT vertan
                            So müßte es dann richtig sein:
                            [highlight=sql]
                            SELECT /*+ FIRST_ROWS */ ab1.rlnr, ab2.rlnr mnr1, ab2.mnr mnr2, ab2.tr
                            FROM (select distinct rlnr from relab) ab1, relab ab2
                            WHERE (ab2.rlnr, ab2.mnr) IN (
                            SELECT rab.rlnr, rab.mnr
                            FROM (SELECT * FROM relab WHERE rlnr != mnr) rab
                            CONNECT BY PRIOR rab.mnr = rab.rlnr
                            START WITH rab.rlnr = ab1.rlnr)
                            AND ab1.rlnr BETWEEN '603102296' AND '603102296'
                            ORDER BY ab1.rlnr DESC, ab2.rlnr desc
                            [/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


                            • #29
                              Hallo Falk,
                              vielen Dank für die schnelle Hilfe.
                              Es hat geklappt.
                              Danke.

                              Liebe Grüsse
                              Andrea

                              Comment

                              Working...
                              X