Kurs Oracle 10g Einführung Teil 7 Einige interessante SQL und PL/SQL Erweiterungen für Administratoren Timo Meyer Administration von Oracle-Datenbanken Timo Meyer Sommersemester 2006 Seite 1 von 19 Seite 1 von 19
Agenda 1 Einführung 2 Reguläre 3 Native Datentypen 4 Mit Tabellen schon während einer Aktualisierung lesen 5 Cost Based Optimizer Timo Meyer Sommersemester 2006 Seite 2 von 19 Seite 2 von 19
1 Einführung Verbesserungen von SQL und PL /SQL in vielen unterschiedlichen Bereichen Entwickelt in besonderer Hinsicht auf Content Management Systeme Einführung Installation Business Intelligence E-Business Bioinformatik Seite 3 von 19 Timo Meyer Sommersemester 2006 Seite 3 von 19
2 Reguläre Ein regulärer Ausdruck (engl: regular expression) ist eine Folge von normalen Textzeichen und / oder Spezialzeichen, mit deren Hilfe komplexe Textmuster beschrieben werden können Mit regulären n lassen sich sehr komplexe Textmuster definieren, nach denen ein Text durchsucht werden kann. Mögliche Einsatzgebiete für regular expressions sind das Suchen bestimmter Muster in einer Zeichenkette (engl: matching) das Extrahieren bestimmter Muster aus Zeichenketten das Ersetzen von bestimmten Mustern bzw. Zeichen (engl: substitution) Reguläre Migration Seite 4 von 19 Timo Meyer Sommersemester 2006 Seite 4 von 19
2 Reguläre Reguläre sind in SQL und PL/SQL verfügbar und unterstützen die Datentypen CHAR, VARCHAR2, CLOB, NCHAR, NVARCHAR und NCLOB Deshalb Erweiterung der existierenden SQL- Funktionen LIKE, SUBSTR, INSTR und REPLACE um folgende neue Funktionen: REGEXP_LIKE stellt ähnlich wie der LIKE-Operator fest, ob Muster sich gleichen REGEXP_SUBSTR gibt Teilstrings aus, die dem Muster entsprechen REGEXP_INSTR stellt fest an welcher Stelle das Muster eine Entsprechung findet REGEXP_REPLACE sucht und ersetzt Muster Darüber hinaus können PL/SQL-Prozeduren geschrieben werden, um den bestehenden Funktionsumfang zu ergänzen Timo Meyer Sommersemester 2006 Seite 5 von 19 Reguläre Migration Seite 5 von 19
2 Reguläre Operatoren Beschreibung \ Definiert Operator, Nachfolgendes Zeichen als nicht Metazeichen * 0 oder mehr Vorkommen + 1 oder mehr Vorkommen? 0 oder 1 Vorkommen a b Alternierend, entweder a oder b ^ Zeichen am Anfang $ Zeichen am Ende. Beliebiges Zeichen [abc] Entwerder a oder b oder c ( ) Gruppiert einen Ausdruck {m} Genau m mal {m,} Mindestens m mal {m,n} Mindestens m mal aber nicht n mal [:cc:] Genügt der Klasse cc, cc = all alphabetischen Zeichen oder Zahlen [=ec=] ec, ce definiert Äquivalenz zwischen Klassen Timo Meyer Sommersemester 2006 Seite 6 von 19 Reguläre Migration Seite 6 von 19
2 Reguläre REGEXP_LIKE Stellt fest, ob Muster existieren Findet Namensvariationen Timo Meyer Tymo oder Timo Meier oder Meyer SELECT c1 FROM t1 WHERE REGEXP_LIKE(c1, T?mo M(ei ey)er ); Tymo Meier Timo Meyer Tymo Meier Timo Meyer Timo Meyer Sommersemester 2006 Seite 7 von 19 Reguläre Migration Seite 7 von 19
2 Reguläre REGEXP_SUBSTR Stellt fest, welcher Text am Besten ergänzt wird Ergänzt selbständig durch Einbeziehung und Prüfung des Kontexts Reguläre Migration SELECT REGEXP_SUBSTR( I am the real Timo Meyer, T?mo M(ei ey)er ) FROM dual; Timo Meyer Seite 8 von 19 Timo Meyer Sommersemester 2006 Seite 8 von 19
2 Reguläre REGEXP_INSTR Findet die Anzahl der Übereinstimmungen heraus Findet das gesucht Wort, auf Grund der Übereinstimmungen Reguläre Migration SELECT REGEXP_INSTR( I am the real Timo Meyer, T?mo M(ei ey)er ) FROM dual; 15 Seite 9 von 19 Timo Meyer Sommersemester 2006 Seite 9 von 19
2 Reguläre REGEXP_REPLACE Ersetzt selbständig den passenden Text Gibt alternative Schreibweise mit aus SELECT REGEXP_REPLACE ( I am the real Timo Meyer, T?mo M(ei ey)er, Timo Meier ) FROM t1; Reguläre Migration I am the real Timo Meyer Timo Meyer Sommersemester 2006 Seite 10 von 19 Seite 10 von 19
2 Reguläre Verwendet mit DDL Filtert die erlaubten Daten mit Check Constraint heraus PLZ-Spalte ist VARCHAR2(5), kann bis zu 5 Zeichen aufnehmen Reguläre Migration Abfrage wird unterteilt und formatiert in einer bestimmten Ansicht ausgegeben Unterteilt die Telefonnummer in folgende Blöcke (xxx) xxx-xxxx Erstellt einen funktionsbasierten Index Seite 11 von 19 Timo Meyer Sommersemester 2006 Seite 11 von 19
2 Reguläre Verwendet mit PL/SQL Sehr leistungsfähige Fähigkeit bei String- Manipulationen src := REGEXP_REPLACE (src, <regexp_1> ); src := REGEXP_REPLACE (src, <regexp_2> ); src := REGEXP_REPLACE (src, <regexp_3> ); Verbesserung der existierenden Funktionen Unterstüzt Kurzschreibweise von Pearl Vereinfacht Ersetzt sehr viele Quellcodezeilen auf einmal Funktionen für String-Manipulationen können vereinfacht werden Reguläre Migration Seite 12 von 19 Timo Meyer Sommersemester 2006 Seite 12 von 19
3 Native Datentypen In früheren Version von Oracle war der Datentyp NUMBER der einzige numerische Datentyp, der in der Datenbank unterstützt wurde Die Kompabilität zu Java, XML und anderen Anwendungen in der Bioinformatik erforderten eine Datentypeinführung an den IEEE-Standard (Institute of Electrical and Electronics Engineers) für binäre Fließkommazahlen In OLAP und Data Mining wurden zwei neue native Fließkommadatentypen eingeführt: BINARY_FLOAT 32 Bit IEEE 754 Format BINARY_DOUBLE 64 Bit IEEE 754 Format Seite 13 von 19 Timo Meyer Sommersemester 2006 Seite 13 von 19
3 Reguläre Praxisbeispiel PL/SQL Erweiterungen in PL/SQL ermöglichen z.b. die Berechnung von Sinus, Cosinus und die Durchführung von Floating-Point Operationen Beispiel: Berechnung der Zahl π nach Euler Timo Meyer Sommersemester 2006 Seite 14 von 19 ca. 300.000 Wiederholungen benötigte Rechenzeit mit Variable NUMBER 27.7 sec benötigte Rechenzeit mit Variable BINARY_DOUBLE 3.7 sec 7-fache Zeitersparnis!!! Seite 14 von 19
3 Reguläre Praxisbeispiel Native Floating-Point- Constraints create table floating_point_table2 ( dblprm binary_double constraint dbl_prm primary key, fltfrn binary_float constraint flt_frn references floating_point_table1(fltprm) on delete cascade ); Timo Meyer Sommersemester 2006 Seite 15 von 19 Seite 15 von 19
4 Mit Tabellen während einer Aktualisierung lesen Folgendes Beispiel ermöglicht es dem Administrator Tabellen zu lesen, während diese aktualisiert werden SELECT * FROM employees t WITH (NOLOCK) INNER JOIN roysched r WITH (NOLOCK) ON t.title_id = r.title_id; Die Anweisungen WITH(NOLOCK) müssen immer nach dem Tabellennamen oder nach einem Alias erfolgen Seite 16 von 19 Timo Meyer Sommersemester 2006 Seite 16 von 19
5 Cost Based Der Optimizer ermittelt, welche Zugriffsmethode auf eine Tabelle die schnellst ist unter Berücksichtigung der Kostenersparnis Performance Tuning und Stored Procedures erlauben es dem Optimizer nicht immer den idealen Execution Plan durchzuführen Als Administrator kann man eine Ausführungsmethode erzwingen, folgende Optionen sind hinzugekommen Timo Meyer Sommersemester 2006 Seite 17 von 19 Seite 17 von 19
5 Cost Based SELECT /*+ SPREAD_MIN_ANALYSIS */... (Reduces compilation time) SELECT /*+ CARDINALITY ( [tablespec] card ) */ SELECT /*+ SELECTIVITY ( [tablespec] sel ) */ SELECT /*+ NO_USE_NL ( employees ) */ SELECT /*+ NO_USE_NL ( employees ) */... SELECT /*+ NO_USE_MERGE ( employees dept ) */... Syntax: /*+ NO_INDEX_FFS ( tablespec indexspec ) */ /*+ CPU_COSTING (tablespec indexspec) */ /*+ NO_INDEX_SS (tablespec indexspec ) */ SELECT /*+ NO_USE_HASH ( employees dept ) */... Seite 18 von 19 Timo Meyer Sommersemester 2006 Seite 18 von 19
Fragen Timo Meyer Sommersemester 2006 Seite 19 von 19 Seite 19 von 19