Benutzer-Werkzeuge

Webseiten-Werkzeuge


prog:sql_oracle_pattern_matching_problemes_risks

Oracle SQL Pattern Matching - Fallstricke und Probleme

ab Oracle 12c

Auf einfachen Beispielen funktioniert auf den ersten Blick der Einsatz von Oracle SQL Pattern Matching ( siehe ⇒ Oracle SQL Pattern Matching Funktion in der Praxis einsetzen sehr gut.

Was aber wenn die Daten nicht matchen? Wie valideren und wie wirklich sicher sein das hier alles gefunden wird?

Die Kunst liegt darin das gewünschte Pattern so zu definieren, das wirklich auch alle Daten gefunden werden.

Probleme 1- Vollumfänglich ALLE Daten finden

Die Pattern funktionieren ja im Prinzip wie Trigger auf Events in den Daten.

Was ist aber mit den Daten die sich gar nicht ändern?

Wie finden wir diese Daten um am Ende eine vollständige Liste zu erhalten?

Beispiel:

Kunden habe ein Flag, das den Wert 1 oder 2 annehmen kann, pro Tag liegen für alle Kunden die Daten vor. Täglich soll eine Summary Tabelle erstellt werden von wann bis wann der Kunde in 1 oder 2 war.

In der Basis Tabelle liegt die Information pro Tag vor, bein „älteren“ Kunden dann für die letzten x Tage, für einen neuen Kunden nur 1 mal. Der Status der Kunden kann täglich wechseln oder aber auch permanent auf den gleichen Wert bleiben.

D.h. wir benötigen pro Kunden ein Start-/Enddatum und den Wert des Flags. Das maximale Enddatum ist der aktueller Tag.

Pattern:

..
  pattern (   SegChange |  ( ^NoChange1{1}$ ) 
                        |  ( ^NoChange2{1}$ )
                        |  ( ^NoChange1  { - NoChange1+ - } NoChange1$  ) 
                        |  ( ^NoChange2  { - NoChange2+ - } NoChange2$ ) 
           ) 
           DEFINE
                SegChange  AS PREV(SEGMENT) != SEGMENT
              , NoChange1  AS SEGMENT = 1
              , NoChange2  AS SEGMENT = 2
 

Im Detail zu ^NoChange1 { - NoChange1+ - } NoChange1$ ⇒ Suche ersten Datensatz mit 1 , danach müssen immer Datensätze mit 1 folgen bis zum Ende, mit dem „-“ werden diese aber aus dem Ergebnis ausgeblendet.

Exclusion

Parts of the pattern to be excluded from the output of ALL ROWS PER MATCH are enclosed between {- and -}. See "How to Exclude Portions of the Pattern from the Output".

Quellen

Cookies helfen bei der Bereitstellung von Inhalten. Diese Website verwendet Cookies. Mit der Nutzung der Website erklären Sie sich damit einverstanden, dass Cookies auf Ihrem Computer gespeichert werden. Außerdem bestätigen Sie, dass Sie unsere Datenschutzerklärung gelesen und verstanden haben. Wenn Sie nicht einverstanden sind, verlassen Sie die Website. Weitere Information
"Autor: Gunther Pipperr"
prog/sql_oracle_pattern_matching_problemes_risks.txt · Zuletzt geändert: 2020/10/06 21:26 von gpipperr