oracle sql im überblick - inf.uni- · pdf fileoracle sql im überblick editor: klaus...

31
Oracle SQL im Überblick Editor: Klaus Philipp (Hochschulrechenzentrum Dortmund, E-Mail: [email protected] Dortmund.de ) Dies ist ein Überblick über die gängigsten SQL-Kommandos, die dem Leser als Kurzanleitung dienen soll. Als umfassendes Nachschlagewerk sei das Werk von Koch: „Oracle 8: Die umfassende Referenz“ empfohlen. SQL, die Standard-Abfragesprache für Datenbanken 1. Allgemeines 2. Datentypen und Operatoren 3. Datendefinition (DDL) 4. Datenmanipulation (DML) 5. Der Select-Befehl 1. Allgemeines Die sogenannte SQL (Structured Query Language) ist eine standardisierte Abfragesprache, die alle Sprachelemente enthält, die erforderlich sind, um sämtliche Arbeiten, die beim Umgang mit einer relationalen Datenbank anfallen, auszuführen. SQL ist relational vollständig und damit gleichmächtig zum Relationenkalkül bzw. zur Relationenalgebra. Die gängigen Datenbankmanagementsysteme, zu denen ORACLE, INFORMIX und andere zählen, bieten den Sprachumfang gemäß dem ANSI-Standard (92), allerdings im allgemeinen nicht den vollen Sprachumfang. Jedes System stellt aber auch eigene Erweiterungen zur Verfügung, die bei anderen Datenbanksystemen nicht vorhanden sind. Diese Erweiterungen sind meistens Architektur- bedingt: z. B. CREATE TABLESPACE In SQL unterscheidet man mehrere Befehlsgruppen: die zur Datendefinition dienen Diese Befehlsgruppe wird als Data Definition Language (DDL) bezeichnet. die zur Manipulation der Daten verwendet werden. Diese Gruppe wird Data Manipulation Language (DML) genannt. Eine besondere Bedeutung kommt dem sogenannten SELECT-Kommando zu, mit dem man Auswertungen fast jeder Komplexität durchführen kann. Darüber hinaus gibt es Befehlsgruppen, die die Vergabe von Zugriffsrechten steuern (DCL, Data Control Language), die Struktur und Größe der Datenbank beeinflussen zur Transaktionsverarbeitung notwendig sind

Upload: ledung

Post on 05-Feb-2018

218 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Oracle SQL im Überblick - inf.uni- · PDF fileOracle SQL im Überblick Editor: Klaus Philipp (Hochschulrechenzentrum Dortmund, E-Mail: K.Philipp@HRZ.Uni-Dortmund.de ) Dies ist ein

Oracle SQL im Überblick Editor: Klaus Philipp (Hochschulrechenzentrum Dortmund, E-Mail: [email protected] )

Dies ist ein Überblick über die gängigsten SQL-Kommandos, die dem Leser als Kurzanleitung dienen soll. Als umfassendes Nachschlagewerk sei das Werk von Koch: „Oracle 8: Die umfassende Referenz“ empfohlen.

SQL, die Standard-Abfragesprache für Datenbanken • 1. Allgemeines • 2. Datentypen und Operatoren • 3. Datendefinition (DDL) • 4. Datenmanipulation (DML) • 5. Der Select-Befehl

1. Allgemeines

Die sogenannte SQL (Structured Query Language) ist eine standardisierte Abfragesprache, die alle Sprachelemente enthält, die erforderlich sind, um sämtliche Arbeiten, die beim Umgang mit einer relationalen Datenbank anfallen, auszuführen.

SQL ist relational vollständig und damit gleichmächtig zum Relationenkalkül bzw. zur Relationenalgebra.

Die gängigen Datenbankmanagementsysteme, zu denen ORACLE, INFORMIX und andere zählen, bieten den Sprachumfang gemäß dem ANSI-Standard (92), allerdings im allgemeinen nicht den vollen Sprachumfang. Jedes System stellt aber auch eigene Erweiterungen zur Verfügung, die bei anderen Datenbanksystemen nicht vorhanden sind. Diese Erweiterungen sind meistens Architektur-bedingt: z. B. CREATE TABLESPACE

In SQL unterscheidet man mehrere Befehlsgruppen:

• die zur Datendefinition dienen Diese Befehlsgruppe wird als Data Definition Language (DDL) bezeichnet.

• die zur Manipulation der Daten verwendet werden. Diese Gruppe wird Data Manipulation Language (DML) genannt.

• Eine besondere Bedeutung kommt dem sogenannten SELECT-Kommando zu, mit dem man Auswertungen fast jeder Komplexität durchführen kann.

Darüber hinaus gibt es Befehlsgruppen, die

• die Vergabe von Zugriffsrechten steuern (DCL, Data Control Language), • die Struktur und Größe der Datenbank beeinflussen • zur Transaktionsverarbeitung notwendig sind

Page 2: Oracle SQL im Überblick - inf.uni- · PDF fileOracle SQL im Überblick Editor: Klaus Philipp (Hochschulrechenzentrum Dortmund, E-Mail: K.Philipp@HRZ.Uni-Dortmund.de ) Dies ist ein

• Daten aus dem UNIX-Filesystem laden bzw. in das Filesystem entladen (ORACLE ( eigene Tools, INFORMIX ( SQL)

Alle SQL-Befehle können bei ORACLE mit dem Programm sqlplus ausgeführt werden.

Bevor wir zu den eigentlichen SQL-Anweisungen kommen, sollen einige wichtige Begriffe geklärt werden.

Manipulierte Objekte

- Table

Eine Tabelle ist eine Datenstruktur, die in einer relationalen Datenbank die Daten enthält. Sie besteht aus Zeilen und Spalten.

- Column

Jede Spalte repräsentiert ein Attribut des Entity. Z. B. enthält die Employee-Tabelle die Spalten ename und sal, die den Namen und das Gehalt eines Angestellten repräsentieren.

- Row

Zeilen speichern die Daten einer Tabelle. Jede Zeile repräsentiert ein Exemplar eines Entity. In der Employee-Tabelle entspricht also eine Zeile genau einem Angestellten.

- Value

Ein Wert ist das Datum, das durch den Schnitt einer gegebenen Zeile und Spalte referenziert wird. Ein Wert nimmt den Datentypen seiner Spalte an.

- View

Ein View ist die logische Repräsentation einer Tabelle oder einer Kombination von Tabellen. Ein View erhält seine Daten aus den Tabellen, auf denen er basiert. Diese Tabellen heißen daher base tables. Basistabellen können reale Tabellen, aber auch selbst Views sein.

- Index

Indizes werden in relationalen DBMS für zwei verschiedene Zwecke benötigt:

• Beschleunigung des Zugriffs auf die Zeilen einer Tabelle • Erzwingung der Eindeutigkeit von Zeilen einer Tabelle

- Cluster

Clustering ist ein Mittel zur Strukturierung der Daten in ein oder mehreren Tabellen, so daß deren Zeilen physisch nebeneinander liegen. Clustering ist vorteilhaft, wenn eine Anwendung häufig dieselben Gruppierung der Zeilen einer Tabelle vornimmt.

Beispiel

Page 3: Oracle SQL im Überblick - inf.uni- · PDF fileOracle SQL im Überblick Editor: Klaus Philipp (Hochschulrechenzentrum Dortmund, E-Mail: K.Philipp@HRZ.Uni-Dortmund.de ) Dies ist ein

Wenn Angestellte aus der Employee-Tabelle jedesmal anhand der Abteilungsnummer verarbeitet werden, ist es von Vorteil ein Clustering dieser Tabelle nach der Spalte depno durchzuführen.

Die Verwendung von Indizes und Clustern ist für den Benutzer transparent:

ORACLE verwendet diese implizit, wenn es für die auszuführende Operation vorteilhaft ist. Der Benutzer kann nicht durch Modifikation eines SQL-Statements explizit den ORACLE- Query-Optimizer beeinflussen.

Optimizer können Regel- oder Statistik-basierend sein.

Die oben beschriebene Eigenschaft der Transparenz wird als Physische Datenunabhängigkeit bezeichnet.

Durch den Zugriff auf Daten mittels SQL wird ebenfalls die Logische Datenunabhängigkeit gewährleistet, d. h.:

keine Manipulation von Pointern, sondern Zugriff durch Namensangabe Schützen der logischen Struktur durch den Einsatz von Views

Weitere wichtige Begriffe

- Keys

Primary Key Der Primärschlüssel einer Tabelle wird benutzt, um jede Zeile eindeutig zu identifizieren. Er kann aus einer oder mehreren Spalten der Tabelle bestehen (bei mehreren Spalten ( composite (compound) primary key Es besteht eine bijektive Beziehung zwischen dem Primärschlüssel und genau einer Zeile der Tabelle. Der Primärschlüssel wird benötigt, da eine Tabelle als ungeordnete Menge angesehen wird (wird in SQL aber nicht zwingend vorgeschrieben).

Foreign Key Fremdschlüssel repräsentieren Beziehungen zwischen Tabellen. Fremdschüssel ( Spalte oder Gruppe von Spalten, deren Werte abgeleitet sind von dem Primärschlüssel einer anderen Tabelle. So ist die Spalte deptno der Primärschlüssel der Tabelle dept. Die Spalte deptno der Employee-Tabelle emp ist ein Fremdschlüssel, der die Tabelle dept referenziert.

Unique Key Ein Unique Key hat alle Eigenschaften eines Primary Key.

Im Gegensatz zum Primary Key, der eine Zeile identifizieren soll, stellt der Unique Key lediglich die Eindeutigkeit sicher. Ein Unique Key sollte keine Null-Werte enthalten.

- Constraints

Ein Integrity Constraint ist eine Regel, die eine Beziehung innerhalb des Systems erzwingt. Sie werden eingesetzt, um die referentielle Integrität in einem relationalen DBMS zu sichern.

Page 4: Oracle SQL im Überblick - inf.uni- · PDF fileOracle SQL im Überblick Editor: Klaus Philipp (Hochschulrechenzentrum Dortmund, E-Mail: K.Philipp@HRZ.Uni-Dortmund.de ) Dies ist ein

(u. a. die Beziehung Primärschlüssel ( Fremdschlüssel). Der Nutzen referentieller Integrität ist die Datenkonsistenz. ( Constraints werden im ORACLE Data-Dictionary gespeichert. ( In Version 6 wird nur die Syntax unterstützt, die Semantik erst ab Version 7

Beispiel

Einem Angestellten aus der emp-Tabelle darf keine deptno zugewiesen werden, die in der Tabelle dept nicht existiert.

Constraints können folgende Formen annehmen: - NOT NULL-Restriktion - UNIQUE-Restriktion - PRIMARY KEY-Restriktion (---> UNIQUE und NOT NULL) - FOREIGN KEY-Restriktion Die Spalte gehört zu einem Fremdschlüssel und muß den Primärschlüssel der angegebenen Tabelle referenzieren. - CHECK-Restriktion Bevor eine Zeile eingefügt oder geändert wird, muß sie einem vorgegebenen Ausdruck genügen.

2. Datentypen und Operatoren

Auch hier gibt es Unterschiede zwischen den einzelnen SQL-Implementierungen. Falls ein Datentyp nur bei einem Konkurrenzsystem verfügbar ist, wird dies notiert.

Datentypen:

SERIAL[(n)] Eindeutige fortlaufende Zahl, die automatisch vergeben wird. Sie kann zu Beginn mit n initialisiert werden, der Standard-Anfangswert ist 1. Eine Zahl in einer SERIAL-Spalte kann nicht verändert werden. (nur bei INFORMIX verfügbar)

CHAR(n) Eine Zeichenfolge der Länge n, die zulässige Länge hängt vom DBMS ab. INFORMIX: 1 - 32767 ORACLE: 1 - 255 (default = 1)

CHARACTER wie oben

VARCHAR wie CHAR, jedoch muß eine Länge angegeben werden Zukünftige Versionen von ORACLE definieren CHAR vielleicht als Zeichenketten fester Länge.

LONG Daten vom Typ "Character" mit einer variablen Länge von bis zu 65535 Zeichen. Maximal eine Spalte vom Typ LONG je Tabelle zulässig

Page 5: Oracle SQL im Überblick - inf.uni- · PDF fileOracle SQL im Überblick Editor: Klaus Philipp (Hochschulrechenzentrum Dortmund, E-Mail: K.Philipp@HRZ.Uni-Dortmund.de ) Dies ist ein

LONG VARCHAR wie oben

RAW(n) Binäre Daten in der Länge n. Die Größe muß angegeben werden (max. 255 B.). Die Werte müssen als Zeichenstrings in hexadezimaler Notation eingegeben werden.

LONG RAW Binäre Daten, ansonsten wie LONG

DATE Ein Datum, das in Form einer Zeichenkette eingegeben wird.

ROWID Identifiziert eindeutig eine Zeile in einer Tabelle. Werte vom Typ ROWID werden von der Pseudo-Spalte ROWID geliefert (aber ROWIDTOCHAR ---> CHAR möglich) Keine Definition von Spalten dieses Typs möglich.

Numerische Datentypen:

SMALLINT Eine ganze Zahl INFORMIX: Wertebereich -32767 bis +32767 ORACLE: NUMBER(38)

INTEGER Eine ganze Zahl INFORMIX: -2.147.483.647/+2.147.483.647. ORACLE: NUMBER(38)

DECIMAL(m,n) Zahl mit definierbarer Größe und Nachkommastellen. INFORMIX: m<= 32, Default: DECIMAL(16) ORACLE: m<= 38.

NUMBER ähnlich dem obigen Datentypen

SMALLFLOAT Eine Gleitkommazahl mit bis zu 7 signifikanten Ziffern und einfacher Genauigkeit (nur bei INFORMIX verfügbar).

FLOAT Gleitkommazahl

REAL Gleitkommazahl

DOUBLE PRECISION Gleitkommazahl

MONEY(m,n) wie DECIMAL (Format: DBMONEY-Variable) (nur bei INFORMIX verfügbar)

Die SQL/DS GRAPHIC-Datentypen haben in ORACLE keine Entsprechung.

Abspeicherung der numerischen Datentypen (ORACLE-spezifisch)

Angegebener Datentyp Präzision Nachkommastellen

NUMBER 38 null NUMBER(*) 38 null NUMBER(*,s) 38 s NUMBER(p) p 0 NUMBER(p,s) p s DECIMAL 38 0 DECIMAL(*) 38 0

Page 6: Oracle SQL im Überblick - inf.uni- · PDF fileOracle SQL im Überblick Editor: Klaus Philipp (Hochschulrechenzentrum Dortmund, E-Mail: K.Philipp@HRZ.Uni-Dortmund.de ) Dies ist ein

DECIMAL(*,s) 38 s DECIMAL(p) p 0 DECIMAL(p,s) p s INTEGER 38 0 SMALLINT 38 0 FLOAT 38 null FLOAT(*) 38 null FLOAT(b) b null REAL 63b,18d null DOUBLE PRECISION 38 null

Alle Datentypen werden in einem internen ORACLE Number Format abgespeichert.

Wertebereiche:

p (decimal precision) 1 - 38 s (scale) -84 - 127 b (binary precision) 1 - 126

Die Angabe null impliziert eine Fließkommazahl.

DEC und NUMERIC sind Synonyme für DECIMAL. INT ist ein Synonym für INTEGER.

Datentyp-Konvertierungen:

nach CHAR NUMBER DATE von CHAR - TO_NUMBER TO_DATE NUMBER TO_CHAR - TO_DATE DATE TO_CHAR nicht zulässig -

Syntax und Einzelheiten zu den Datentypen

- ROWID ( Pseudo-Spalte, die mit jeder Zeile in der Datenbank assoziiert wird. ( ROWID liefert ein Ergebnis in einer Hexadezimal-String Repräsentation für jede selektierte Zeile zurück.

Beispiel

ROWID ENAME -------------------------------------------------- 0000000F.0000.0002 SMITH 0000000F.000C.0002 SCOTT Block Zeile Database-File

Vorteile ( schnellste Möglichkeit des Zugriffs auf Daten ( Angabe, wo die Zeilen einer Tabelle gespeichert sind

Page 7: Oracle SQL im Überblick - inf.uni- · PDF fileOracle SQL im Überblick Editor: Klaus Philipp (Hochschulrechenzentrum Dortmund, E-Mail: K.Philipp@HRZ.Uni-Dortmund.de ) Dies ist ein

- CHAR/VARCHAR Syntax '[char]...' Dabei ist char aus dem verfügbaren Zeichensatz (z. B. ASCII).

Beispiel 'Hallo', 'Willi Mueller', '31-DEC-92'

- INTEGER Syntax [ + | - ]ziffer[ziffer]...[ K | M ]

Beispiele 255, 29K, 6M

- NUMBER Syntax [ + | - ]ziffer[ziffer]...[Exponent | Multiplizierer] Exponent: {e|E}[+|-]digit[digit]... Multiplizierer: K oder M

Beispiele 25, 2.98, 5E3, 5e-3, 512K

- DATE Für jedes Datum werden Jahrhundert, Jahr, Monat, Tag, Stunde, Minute, Sekunde abgespeichert. - Die Speicherung erfolgt im 24-Stunden-Format - Der Defaultwert für die Zeit ist 12:00:00 a.m. - Der Defaultwert für das Datum ist der erste Tag des laufenden Monats. - Die aktuellen Werte liefert die Funktion SYSDATE (Maschinendatum). - Das ORACLE DATE-Standardformat ist DD-MON-YY.

Beispiel: 24-DEC-92

Zur Eingabe von Daten, die nicht dem Standardformat entsprechen oder einen Zeitanteil enthalten, muß die TO_DATE-Funktion mit einer Formatmaske verwendet werden.

Beispiel: insert into geburtstag (gname,gtag) values ('Willi', to_date ('70-DEC-24 16:30 P.M.', 'YY-MON-DD HH:MI P.M.') Arithmetik mit DATE-Feldern: Datum - Datum Datum +/- Konstante (z.B. SYSDATE + 1 / -7)

Operatoren:

Die im folgenden aufgeführten Operatoren können innerhalb der meisten SQL-Anweisungen (DML) verwendet werden.

Arithmetische Operatoren:

() überschreibt die normalen Vorrangregeln select (x+y)/(x-y)

+ - bezeichnet einen positiven oder negativen ...where wert = -1 Ausdruck ...where -gehalt < 0 * / multiplizieren u. dividieren select 2*x+1 + - addieren u. subtrahieren ...where x > y/2

Operatoren für Zeichenketten || Konkatenation von Characterwerten select 'Name: '||ename

Vergleichsoperatoren:

Page 8: Oracle SQL im Überblick - inf.uni- · PDF fileOracle SQL im Überblick Editor: Klaus Philipp (Hochschulrechenzentrum Dortmund, E-Mail: K.Philipp@HRZ.Uni-Dortmund.de ) Dies ist ein

() überschreibt die normalen Vorrangregeln ...not(a=1 or b=1) = Test auf Gleichheit ...where gehalt = 1000 !=,^=,<> Test auf Ungleichheit ...where gehalt != 1000 >,<,>=,<= Tests auf kleiner/größer als ...where gehalt >= 1000 IN Gleichheit zu einem Mitglied einer ...where job in Menge ('CLERK','ANALYST') äquivalent zu "=ANY" ...where sal in (select sal from emp where deptno = 30) NOT IN äquivalent zu "!=ALL" ...where sal not in (select sal from emp where deptno = 30) ANY vergleicht einen Wert mit jedem Wert aus ...where sal = any einer Liste oder Subquery. Vorausgehen (select sal from emp where muß einer der Operatoren =,!=,<,>,<=,>= deptno = 30) ALL vergleicht einen Wert mit allen Werten aus ...where (sal,comm) >= all einer Liste oder Subquery. Vorausgehen ((1500,300),(3000,0)) muß einer der Operatoren =,!=,<,>,<=,>= [NOT] [nicht] größer als oder gleich x und kleiner ...where a between 0 and 9 BETWEEN als oder gleich y x AND y [NOT] liefert TRUE, wenn eine Subquery mindestens ...where exists EXISTS eine [keine] Zeile zurückliefert (select sal from emp where deptno = 30) [NOT] LIKE stimmt mit dem nachfolgenden Muster ...where nachname überein oder nicht. Das Zeichen "%" ent- like 'M%' spricht irgendeinem String der Länge >= 0, "_" entspricht genau einem Zeichen IS [NOT] NULL Test auf NULL-Wert ...where job is null

Logische Operatoren:

() überschreibt die Vorrangreihenfolge select ... where x = y and der Operatoren (a = b or p = q) NOT invertiert das Ergebnis eines ...where not (job is null) logischen Ausdrucks ...where not (plz like '4%') AND logisches UND ...where a=1 and b=1 OR logisches ODER ...where a=1 or b=1

Mengenoperatoren:

UNION kombiniert Queries, indem alle Zeilen select... union select ...; geliefert werden, die von jeder einzelnen Abfrage erfaßt werden (Vereinigung)

Page 9: Oracle SQL im Überblick - inf.uni- · PDF fileOracle SQL im Überblick Editor: Klaus Philipp (Hochschulrechenzentrum Dortmund, E-Mail: K.Philipp@HRZ.Uni-Dortmund.de ) Dies ist ein

INTERSECT Mengen-Durchschnitt der Zeilen ...select ... intersect select ...; MINUS Mengen-Differenz ...select ... minus select ...;

sonstige Operatoren:

COUNT liefert die Anzahl der Zeilen select count(gehalt) (expr) für die expr nicht NULL ist from emp COUNT(*) liefert alle Zeilen einer Tabelle DISTINCT eliminiert doppelte Zeilen oder select distinct * ... doppelte Werte in einem ...count(distinct deptno) Aggregatausdruck

Funktionen:

Die nachstehende Liste der Funktionen ist sicherlich nicht vollständig. Ebenso werden nur in einigen Fällen Beispiele angeführt wie diese Funktionen eingesetzt werden. Für weitergehende Informationen wird auf die Originaldokumentation verwiesen.

Numerische Funktionen (Single Row)

ABS ABS(n) select abs(-15) "Absolute" from dual Ergebnis Absolute ----------- 15 CEIL CEIL(n) COS COS (n) COSH COSH (n) EXP EXP (n) FLOOR FLOOR(n) LN LN (n) LOG LOG (m,n) MOD MOD(m,n) POWER POWER(m,n) ROUND ROUND(n[,m]) select round(15.193,1) "Round" from dual Ergebnis Round -------- 15.2 select round(15.193,-11) "Round" from dual Ergebnis Round -------- 20

Page 10: Oracle SQL im Überblick - inf.uni- · PDF fileOracle SQL im Überblick Editor: Klaus Philipp (Hochschulrechenzentrum Dortmund, E-Mail: K.Philipp@HRZ.Uni-Dortmund.de ) Dies ist ein

SIN SIN (n) SINH SINH (n) SIGN SIGN(n) SQRT SQRT(n) TAN TAN (n) TANH TANH (n) TRUNC TRUNC(n[,m])

Character Funktionen (Single Row)

CHR CHR(n) select chr(75) "Character" from dual Ergebnis Character ------------ K

CONCAT CONCAT (s1, s2) select concat (concat (ename, ´ is a ´), job) "Job" from emp where empno = 7900 Ergebnis Job ---------------------------- JAMES is a CLERK

INITCAP INITCAP(char) select initcap('HERR WILLI MEIER') "Capitalized" from dual Ergebnis Capitalized --------------------- Herr Willi Meier

LOWER LOWER(char) select lower('HERR WILLI MEIER') "Lowercase" from dual Ergebnis Lowercase --------------------- herr willi meier

REPLACE REPLACE select replace('Jack & Jue','J','BL') (s, search_string[,replacement_string]) "Changes" from dual Ergebnis Changes --------------- Black & Blue

SOUNDEX SOUNDEX(char) select ename from emp where soundex(ename) = soundex('SMYTHE') Ergebnis ename ----------- SMITH

Page 11: Oracle SQL im Überblick - inf.uni- · PDF fileOracle SQL im Überblick Editor: Klaus Philipp (Hochschulrechenzentrum Dortmund, E-Mail: K.Philipp@HRZ.Uni-Dortmund.de ) Dies ist ein

SUBSTR SUBSTR(char,m[,n])

TRANSLATE (s, from, to) select translate (´2KRW229´, ´0123456789ABC...XYZ´,´9999999999XXX...XXX´) "Translate example" from dual Ergebnis Translate example ---------------------- 9XXX999

UPPER UPPER (s)

Character-Funktionen mit numerischen Rückgabewerten

ASCII ASCII(char) select ascii('Q') from dual Ergebnis ASCII('Q') -------------- 81

INSTR INSTR(char1,char2, select instr [,n[,m]]) ('MISSISSIPPI','S',5,2) "Beispiel" from dual liefert die Position des m-ten Auftretens von char2 in char1 ab Position n Ergebnis Beispiel ------------ 7

LENGTH LENGTH (char) select length (´Willi´) "Laenge" from dual Ergebnis Laenge --------- 5

Gruppenfunktionen:

Diese Art von Funktionen liefert Resultate, die auf Gruppen von Zeilen basieren; im Gegensatz dazu liefern Single Row Funktionen je Zeile ein Ergebnis. Als Defaultwert wird das gesamte Resultat als eine einzige Gruppe aufgefaßt. Um das Ergebnis in kleinere Gruppen zu zerlegen, muß die GROUP BY-Klausel verwendet werden.

AVG AVG select avg(sal) "Average" from emp ([DISTINCT|ALL] n) liefert den Mittelwert von n, ignoriert NULL-Werte Ergebnis Average ------------ 2073,50

Page 12: Oracle SQL im Überblick - inf.uni- · PDF fileOracle SQL im Überblick Editor: Klaus Philipp (Hochschulrechenzentrum Dortmund, E-Mail: K.Philipp@HRZ.Uni-Dortmund.de ) Dies ist ein

Beispiel: Es liegen die Werte 1,1,1 und 3 vor. Der DISTINCT-Mittelwert ist 2. Der ALL- Mittelwert ist 1.5. COUNT COUNT select count(jobs) "Count" (expr) ([DISTINCT|ALL] expr) from emp Ergebnis Count ----------- 4 COUNT(*) COUNT(*) select count(*) from emp MAX MAX ([DISTINCT|ALL] expr) select max(sal) "Maximum" from emp MIN MIN ([DISTINCT|ALL] expr) select min(hiredate) "Mindat" from emp Ergebnis Mindat ------------- 17-DEC-80 STDDEV STDDEV ([DISTINCT|ALL] n) SUM SUM ([DISTINCT|ALL] n) VARIANCE VARIANCE ([DISTINCT|ALL] n)

Konvertierungsfunktionen (Auszug):

CHARTOROWID(char) HEXTORAW(char) RAWTOHEX(raw) ROWIDTOCHAR(rowid) select rowid from graphics where rowidtochar(rowid) like '%F38%' TO_CHAR(n,[,fmt]) TO_CHAR(d,[,fmt]) TO_DATE(char[,fmt]) insert into bonus (bonus_date) select to_date ('January 15, 1989','Month dd, YYYY') from dual TO_NUMBER ...sal+to_number(substr('$100 raise,2,3)

Date-Funktionen:

LAST_DAY LAST_DAY (d) select sysdate, last_day (sysdate) "Last", last_day (sysdate) - sysdate "Days Left" from dual Ergebnis SYSDATE Last Days Left -------------- -------------- ------------ 18-NOV-93 30-NOV-93 12 MONTHS_BETWEEN MONTHS_BETWEEN (d1,d2) select months_between (to_date (´02-02-93´, ´MM-DD-YYYY´), (to_date (´01-01-93´, ´MM-DD-YYYY´)) "Monate" from dual

Page 13: Oracle SQL im Überblick - inf.uni- · PDF fileOracle SQL im Überblick Editor: Klaus Philipp (Hochschulrechenzentrum Dortmund, E-Mail: K.Philipp@HRZ.Uni-Dortmund.de ) Dies ist ein

Ergebnis Monate --------------- 1.03225806

sonstige Funktionen:

LEAST LEAST (expr [,expr] ...) select least (´Harry´, ´Harald´) from dual Ergebnis LEAST --------- Harald NVL NVL (expr1, expr2) select ename, nvl (to_char Nullwert-Ersetzung (provision), ´KEINE´) from emp

3. Datendefinition (DDL)

Anweisungen zur Datendefinition dienen zur Einrichtung, Änderung oder Löschung von Datenbankobjekten wie z. B. Tabellen, Indizes, Cluster, usw. Hierunter fallen hauptsächlich die CREATE-, ALTER- und DROP-Anweisungen. Die folgende Liste ist alphabetisch geordnet.

ALTER CLUSTER

• Änderung von Speichereigenschaften eines Clusters • Allokierung eines Extents für einen Cluster

ALTER CLUSTER [schema.]cluster [PCTUSED integer] [PCTFREE integer] [SIZE integer] [INITRANS integer] [MAXTRANS integer] [STORAGE storage-clause] [ALLOCATE EXTENT [(SIZE integer DATAFILE ´filename´ INSTANCE integer)]]

Beispiel

ALTER CLUSTER scott.customer SIZE 512 STORAGE (MAXEXTENTS 25)

ALTER DATABASE

• Öffnen oder Mounten einer Datenbank • Konvertieren eines ORACLE Version 6-Data Dictionary bei der Migration auf

Version 7 • Wählen zwischen archivelog / noarchivelog • Ausführen eines Media-Recovery • Hinzufügen / Löschen von Redo-Logfile(-Gruppen) • Umbenennung von Datenfiles / Logfiles-Members

Page 14: Oracle SQL im Überblick - inf.uni- · PDF fileOracle SQL im Überblick Editor: Klaus Philipp (Hochschulrechenzentrum Dortmund, E-Mail: K.Philipp@HRZ.Uni-Dortmund.de ) Dies ist ein

• Backup des aktuellen Controlfiles • Erstellen eines neuen Datenfiles • Setzen eines Datenfiles auf online / offline • Aktivieren und Deaktivieren von Logfile-Gruppen • Ändern des globalen Datenbanknamens

Voraussetzung: Der Benutzer muß das ALTER DATABASE Systemprivileg haben.

ALTER DATABASE [database] [MOUNT --] [CONVERT] [OPEN [RESETLOGS | NORESETLOGS]] [ARCHIVELOG] [NOARCHIVELOG] [RECOVER ---] [ADD LOGFILE ---] --- [DROP LOGFILE MEMBER ---] [RENAME FILE ---] [BACKUP CONTROLFILE TO filename REUSE] [CREATE DATAFILE ---] [DATAFILE filename [ONLINE | OFFLINE [DROP]]] --- [RENAME GLOBAL_NAME TO database ---] ---

Beispiele

ALTER DATABASE hrz MOUNT EXCLUSIVE

ALTER DATABASE hrz ADD LOGFILE GROUP 3 (´diska:log3.log´, ´diskb:log3.log´) SIZE 50K

ALTER DATABASE hrz ADD LOGFILE MEMBER ´diskc:log3.log´ TO GROUP 3

ALTER INDEX

• Redefinieren der zukünftigen Speicherallokation eines Index

ALTER INDEX [schema.]index [INITRANS integer] [MAXTRANS integer] [STORAGE storage_clause]

Beispiel

ALTER INDEX scott.customer INITRANS 5 STORAGE (NEXT 100K)

Der Index wird so geändert, daß zukünftige Datenblocks 5 initiale Transaktionseinträge und ein inkrementelles Extent von 100k verwenden.

Page 15: Oracle SQL im Überblick - inf.uni- · PDF fileOracle SQL im Überblick Editor: Klaus Philipp (Hochschulrechenzentrum Dortmund, E-Mail: K.Philipp@HRZ.Uni-Dortmund.de ) Dies ist ein

ALTER PROFILE

• Hinzufügen oder Entziehen eines Resource-Limits zu oder von einem Profil

ALTER PROFILE profile LIMIT [SESSIONS_PER_USER integer | UNLIMITED | DEFAULT] [CPU_PER_SESSION " ] [IDLE_TIME " ] [LOGICAL_READS_PER_SESSION " ] ---

Beispiele

ALTER PROFILE engineer LIMIT SESSIONS_PER_USER 5

ALTER PROFILE default LIMIT IDLE_TIME 2

ALTER ROLLBACK SEGMENT

• Ändern der Speichercharakteristika eines Rollback-Segments • Setzen auf online oder offline

ALTER ROLLBACK SEGMENT rollback_segment [ONLINE | OFFLINE | STORAGE storage_clause]

ALTER SEQUENCE

• Redefinieren der Wertgenerierung für eine Sequenz

ALTER SEQUENCE [schema.]sequence [INCREMENT BY integer] [MAXVALUE integer | NOMAXVALUE] --- [CYCLE | NOCYCLE] ---

Beispiele

ALTER SEQUENCE folge MAXVALUE 1500

ALTER SEQUENCE folge CYCLE CACHE 5

ALTER SESSION

• Ändern der aktuellen Sitzung durch Aufruf spezieller Funktionen

ALTER SESSION SET [NLS_LANGUAGE = language] --- [NLS_DATE_FORMAT = ´fmt´] --- [OPTIMIZER_GOAL = ALL_ROWS|FIRST_ROWS|RULE|CHOOSE] ---

Page 16: Oracle SQL im Überblick - inf.uni- · PDF fileOracle SQL im Überblick Editor: Klaus Philipp (Hochschulrechenzentrum Dortmund, E-Mail: K.Philipp@HRZ.Uni-Dortmund.de ) Dies ist ein

ALTER SNAPSHOT

• Ändern der Snapshot-Speichercharakteristika • Einstellen der automatischen Refresh-Zeit und des Refresh-Modus

ALTER SNAPSHOT [schema.]snapshot [PCTFREE integer] [PCTUSED integer] [INITRANS integer] [MAXTRANS integer] [STORAGE storage_clause]

ALTER SNAPSHOT [schema.]snapshot REFRESH FAST | COMPLETE | FORCE ---

ALTER SYSTEM

• Ändern der ORACLE-Instanz durch Aufruf einer speziellen Funktion

ALTER SYSTEM [ENABLE | DISABLE RESTRICTED SESSION] --- [CHECKPOINT | CHECK DATAFILES GLOBAL | LOCAL] [SET ---] [KILL SESSION integer1, integer2] (* aus V$SESSION *)

ALTER TABLE

• Hinzufügen einer Spalte • Hinzufügen eines Integrity-Constraints • Redefinieren einer Spalte • Redefinieren von Speichereigenschaften einer Tabelle • Aktivieren, Deaktivieren oder Löschen eines Integrity-Constraints • Allokation eines Extents

ALTER TABLE [schema.]table [ADD (column datatype [DEFAULT expr][column_constraint ...] | table_constraint)] [MODIFY (column [datatype][DEFAULT expr][column_constraint ...])] [PCTFREE integer] --- [STORAGE storage_clause] [DROP drop_clause] [ALLOCATE EXTENT ---] ---

Beispiele

ALTER TABLE emp MODIFY (gehalt NUMBER (9,2))

ALTER TABLE emp PCTFREE 30 PCTUSED 60

ALTER TABLESPACE

Page 17: Oracle SQL im Überblick - inf.uni- · PDF fileOracle SQL im Überblick Editor: Klaus Philipp (Hochschulrechenzentrum Dortmund, E-Mail: K.Philipp@HRZ.Uni-Dortmund.de ) Dies ist ein

• Hinzufügen oder Umbenennen von Datenfiles • Ändern von Speichereigenschaften • Setzen von Tablespaces auf online / offline • Starten / Stoppen eines Backup

ALTER TABLESPACE tablespace [ADD DATAFILE ---] [RENAME DATAFILE ---] --- [ONLINE] [OFFLINE ---] [BEGIN | END BACKUP]

Beispiel

ALTER TABLESPACE accounting OFFLINE NORMAL

ALTER USER

• Ändern eines Benutzerpasswortes • Ändern des default-Tablespace und des temporären Tablespace • Ändern von Tablespace-Quoten, Profilen oder von default-Rollen

ALTER USER user [IDENTIFIED BY password | EXTERNALLY] [DEFAULT TABLESPACE tablespace] [TEMPORARY TABLESPACE tablespace] [QUOTA integer[K | M] | UNLIMITED ON tablespace] [PROFILE profile] [DEFAULT ROLE role, ... | ALL [EXCEPT role, ...] | NONE]

Beispiel

ALTER USER scott IDENTIFIED BY lion DEFAULT TABLESPACE tstest

ALTER USER scott PROFILE sachbearbeiter

ALTER VIEW

• Recompilieren eines Views

ALTER VIEW [schema.]view COMPILE

Beispiel

ALTER VIEW customer_view COMPILE

AUDIT

• Wählen eines Auditing für spezifizierte SQL-Anweisungen • Wählen eines Auditing für Operationen auf Schema-Objekten

Page 18: Oracle SQL im Überblick - inf.uni- · PDF fileOracle SQL im Überblick Editor: Klaus Philipp (Hochschulrechenzentrum Dortmund, E-Mail: K.Philipp@HRZ.Uni-Dortmund.de ) Dies ist ein

für SQL-Statements:

AUDIT statement_opt | system_priv, ... [BY USER] [BY SESSION | ACCESS] [WHENEVER [NOT] SUCCESSFUL]

Beispiele

AUDIT ROLE

AUDIT ROLE WHENEVER SUCCESSFUL

AUDIT SELECT TABLE, UPDATE TABLE BY scott

AUDIT DELETE ANY TABLE

für Schema-Objekte:

AUDIT object_opt, ... ON [schema.]object | DEFAULT [BY SESSION | ACCESS] [WHENEVER [NOT] SUCCESSFUL]

Beispiel AUDIT SELECT ON scott.emp WHENEVER NOT SUCCESSFUL

COMMENT

• Hinzufügen eines Kommentars über eine Tabelle, einen View, einen Snapshot oder eine Spalte zum Data-Dictionary

COMMENT ON TABLE | COLUMN [schema.]table[.column] | [schema.]view[.column] | [schema.]snapshot[.column] IS text

Beispiel

COMMENT ON COLUMN adressen.name IS ´Nachnamen einschliesslich Titel´

COMMENT ON COLUMN adressen.name IS ´´ (Löschen)

CREATE CLUSTER

• Erstellen eines Clusters, der eine oder mehrere Tabellen umfassen kann • Sind mehrere Tabellen betroffen, so haben diese eine oder mehrere Spalten

gemeinsam

CREATE CLUSTER [schema.]cluster (column datatype, ...) [PCTUSED integer] ---

Page 19: Oracle SQL im Überblick - inf.uni- · PDF fileOracle SQL im Überblick Editor: Klaus Philipp (Hochschulrechenzentrum Dortmund, E-Mail: K.Philipp@HRZ.Uni-Dortmund.de ) Dies ist ein

[MAXTRANS integer] [SIZE integer [K | M]] [TABLESPACE tablespace] [STORAGE storage_clause] [INDEX | [[HASH IS column] HASHKEYS integer]

Beispiele

CREATE CLUSTER personnel (department_number NUMBER (2)) SIZE 512 STORAGE (INITIAL 100K NEXT 50K PCTINCREASE 10)

Es wird der (Index-)Cluster mit dem Namen personnel erzeugt, der die cluster key-Spalte department_number, eine Größe von 512 B und die angegebenen Parameterwerte hat.

Die folgenden Anweisungen fügen die Tabellen emp und dept zum Cluster hinzu:

CREATE TABLE emp

(empno NUMBER PRIMARY KEY, ename VARCHAR(10) NOT NULL CHECK (ename=UPPER(ename)), --- deptno NUMBER(2) NOT NULL) CLUSTER personnel (deptno)

CREATE TABLE dept

(deptno NUMBER (2),

---

CLUSTER personnel (deptno)

Optional kann noch ein Index über den Cluster gelegt werden:

CREATE INDEX idx_personnel ON CLUSTER personnel

CREATE CLUSTER personnel (department_number NUMBER) SIZE 512 HASHKEYS 500 (= 503) ---

CREATE CONTROLFILE

Erneutes Erstellen eines Kontrollfiles, falls

alle Kopien des Controlfiles durch Plattenfehler verloren gegangen sind die maximale Anzahl von Redo-Log-Files bzw. Gruppen o. ä. geändert werden soll Notfall-Kommando: sollte im allg. wegen Backups überflüssig sein

CREATE DATABASE

Page 20: Oracle SQL im Überblick - inf.uni- · PDF fileOracle SQL im Überblick Editor: Klaus Philipp (Hochschulrechenzentrum Dortmund, E-Mail: K.Philipp@HRZ.Uni-Dortmund.de ) Dies ist ein

• Erzeugen einer Datenbank

Dient zur Erstellung einer leeren Datenbank mit dem angegebenen Namen database und führt zu der in Teil 6 (wird zur Zeit noch bearbeitet) beschriebenen Verzeichnisstruktur.

CREATE DATABASE database [CONTROLFILE REUSE] [LOGFILE [GROUP integer] filespec, ...] [MAXLOGFILES integer] --- [DATAFILE filespec, ...] [MAXDATFILES integer] --- [CHARACTER SET charset]

Beispiele

CREATE DATABASE

Erzeugt eine kleine Datenbank mit Standardwerten für alle Argumente

CREATE DATABASE testneu CONTROLFILE REUSE LOGFILE GROUP 1 (´diskb:log1.log´, ...) SIZE 50K LOGFILE GROUP 2 (´diskb:log2.log´, ...) SIZE 50K MAXLOGFILES MAXLOGHISTORY 100 DATAFILE ´diska:dbeins.dat´ SIZE 2M MAXDATAFILES 10 ARCHIVELOG EXCLUSIVE

CREATE INDEX

• Erzeugen eines Index für eine Tabelle oder einen Cluster

ORACLE 6

CREATE [UNIQUE|DISTINCT] [CLUSTER] INDEX index-name ON table-name (column-name [ASC|DESC], ...)

Die angegebenen Spalten der genannte Tabellen werden mit einem Index des Namens index-name versehen. Dieser Name muß in der Datenbank eindeutig sein.

ORACLE 7

CREATE INDEX [schema.]index ON [[schema.]table (column [ASC | DESC], ...)] | [CLUSTER [schema.]cluster] --- [TABLESPACE tablespace]

Page 21: Oracle SQL im Überblick - inf.uni- · PDF fileOracle SQL im Überblick Editor: Klaus Philipp (Hochschulrechenzentrum Dortmund, E-Mail: K.Philipp@HRZ.Uni-Dortmund.de ) Dies ist ein

--- [NOSORT]

Beispiel

CREATE INDEX idx_emp_ename ON emp (ename)

CREATE PROFILE

• Erstellt ein Profil und spezifiziert dessen Resource-Limits

CREATE PROFILE profile LIMIT [SESSIONS_PER_USER integer | UNLIMITED | DEFAULT] [CPU_PER_SESSION " ] [IDLE_TIME " ] [LOGICAL_READS_PER_SESSION " ] --- [PRIVATE_SGA integer[K | M] | UNLIMITED | DEFAULT]

PRIVATE_SGA bestimmt den Umfang für privaten Platz im shared pool.

Beispiel

CREATE PROFILE system_manager LIMIT --- CPU_PER_SESSION UNLIMITED COMPOSITE_LIMIT 5000000

CREATE ROLLBACK SEGMENT

• Erzeugt ein Rollback-Segment

CREATE [PUBLIC] ROLLBACK SEGMENT rollback_segment [TABLESPACE tablespace | STORAGE storag_clause], ...

Beispiel

CREATE PUBLIC ROLLBACK SEGMENT rbs_2 TABLESPACE system STORAGE (INITIAL 50K NEXT 50K OPTIMAL 150K MAXEXTENTS 10)

CREATE SEQUENCE

• Erzeugt ein Sequenz zur Generierung aufeinander folgender Werte

CREATE SEQUENCE [schema.]sequence [INCREMENT BY integer] [MAXVALUE integer | NOMAXVALUE] --- [CYCLE | NOCYCLE] ---

Beispiel

Page 22: Oracle SQL im Überblick - inf.uni- · PDF fileOracle SQL im Überblick Editor: Klaus Philipp (Hochschulrechenzentrum Dortmund, E-Mail: K.Philipp@HRZ.Uni-Dortmund.de ) Dies ist ein

CREATE SEQUENCE eseq INCREMENT BY 10

ESEQ.NEXTVAL liefert damit 1, 11, 21 (zusätzlich CURRVAL)

CREATE SNAPSHOT

• Erzeugen eines Snapshots der Daten einer oder mehrerer Tabellen

Ein Snapshot ist eine Tabelle, die die Resultate von Queries auf eine oder mehrere Tabellen oder Views - häufig auf remote-Datenbanken- enthält.

Beispiel

CREATE SNAPSHOT emp_sf PCTFREE 5 PCTUSED 60 TABLESPACE users --- REFRESH FAST NEXT sysdate + 7 AS SELECT * FROM emp@ny

CREATE SYNONYM

• Kreiert ein Synonym für ein Schema-Objekt

CREATE [PUBLIC] SYNONYM [schema.]synonym FOR [schema.]object[@dblink]

Beispiel

CREATE PUBLIC SYNONYM emp FOR scott.emp@sales

CREATE TABLE

• Erstellen einer Tabelle • Definieren von Spalten und Integrity-Constraints • Festlegen der Speicherallokation

CREATE TABLE [schema.]table [table_constraint] (column datatype [DEFAULT expr][column_constraint] | table_constraint)], ...) [PCTFREE integer] --- [TABLESPACE tablespace] [STORAGE storage_clause] [CLUSTER cluster (cluster, ...)] [ENABLE enable_clause | DISABLE disable_clause] [AS subquery]

- DEFAULT spezifiziert einen Wert, wenn ein nachfolgendes INSERT-Kommando den Wert für die Spalte wegläßt.

- PCTFREE Prozent des freien Platzes im Tabellenblock

Page 23: Oracle SQL im Überblick - inf.uni- · PDF fileOracle SQL im Überblick Editor: Klaus Philipp (Hochschulrechenzentrum Dortmund, E-Mail: K.Philipp@HRZ.Uni-Dortmund.de ) Dies ist ein

- PCTUSED minimale Benutzung (in Prozent)

- INITRANS initiale Anzahl von Transaktionseinträgen

- MAXTRANS maximale Anzahl von Transaktionen, die gleich- zeitig einen Datenblock ändern können

- ENABLE/DISABLE aktivieren/deaktivieren Integrity-Constraints

STORAGE

STORAGE ([INITIAL integer [K | M]] | [NEXT integer [K | M]] | [MINEXTENTS integer] | [MAXEXTENTS integer] | [PCTINCREASE integer] | [OPTIMAL integer[K | M] | NULL] | --- INITIAL Größe des ersten Extents NEXT Größe des nächsten Extents PCTINCREASE Prozentuales Wachstum der Extents nach dem zweiten MINEXTENTS Gesamtzahl allokierter Extents beim Erzeugen des Segmentes MAXEXTENTS Maximale Anzahl von reservierbaren Extents OPTIMAL spezifiziert die optimale Größe für ein Rollback-Segment

Beispiele

CREATE TABLE salgrade (grade NUMBER CONSTRAINT pk_salgrade PRIMARY KEY USING INDEX TABLESPACE users_a, minsalary NUMBER) TABLESPACE statistik

CREATE TABLE scott.emp (empno NUMBER CONSTRAINT pk_emp PRIMARY KEY, --- sal NUMBER (10,2) CONSTRAINT ck_sal CHECK (sal < 10000), --- ) STORAGE (INITIAL 6144 NEXT 6144 MINEXTENTS 1 MAXEXTENTS 5 PCTINCREASE 5)

CREATE TABLESPACE

• Erzeugen eines Platzes in der Datenbank zur Speicherung von Schema-Objekten, Rollback-Segmenten und temporären Segmenten

• Angabe der Datenfiles, aus denen der Tablespace besteht

CREATE TABLESPACE tablespace DATAFILE filespec, ...

Page 24: Oracle SQL im Überblick - inf.uni- · PDF fileOracle SQL im Überblick Editor: Klaus Philipp (Hochschulrechenzentrum Dortmund, E-Mail: K.Philipp@HRZ.Uni-Dortmund.de ) Dies ist ein

[DEFAULT STORAGE storage_clause] [ONLINE | OFFLINE]

Beispiel

CREATE TABLESPACE tabspace_2 DATAFILE ´diska:tabspace_file2.dat´ SIZE 20M DEFAULT STORAGE ( --- ) ONLINE

CREATE TRIGGER

Diese Anweisung dient zum Erzeugen und Aktivieren eines Datenbank-Triggers. Ein Trigger ist hier ein gespeicherter PL/SQL-Block, der mit der Tabelle assoziiert ist. ORACLE führt den Trigger automatisch aus, wenn ein SQL-Statement gegen die Tabelle gestartet wird. Dies kann z. B. vor oder nach DELETE, INSERT oder UPDATE der Fall sein (s. SQL-Referenz-Dokumentation).

CREATE USER

• Kreieren eines Datenbank-Benutzers

CREATE USER user IDENTIFIED BY password | EXTERNALLY [DEFAULT TABLESPACE tablespace] [TEMPORARY TABLESPACE tablespace] [QUOTA integer[K | M] | UNLIMITED ON tablespace] [PROFILE profile]

Beispiel

CREATE USER werner IDENTIFIED BY beinhart DEFAULT TABLESPACE user_3 TEMPORARY TABLESPACE temp_2 QUOTA 10M ON user_3 QUOTA 5M ON temp_2 QUOTA 5M ON system PROFILE hausmeister

CREATE VIEW

• Definieren eines Views über eine oder mehrere Tabellen oder Views • erzeugt eine bestimmte Benutzersicht auf die selektierten Daten

CREATE [OR REPLACE] [FORCE | NOFORCE] VIEW [schema.]view [(alias, ...)] AS subquery [WITH CHECK OPTION [CONSTRAINT constraint]]

FORCE erzeugt den View auch wenn die Basistabellen nicht existieren oder keine Privilegien darauf bestehen

alias spezifiziert Namen für die durch die Query selektierten Ausdrücke

Page 25: Oracle SQL im Überblick - inf.uni- · PDF fileOracle SQL im Überblick Editor: Klaus Philipp (Hochschulrechenzentrum Dortmund, E-Mail: K.Philipp@HRZ.Uni-Dortmund.de ) Dies ist ein

subquery SELECT ohne ORDER BY und FOR UPDATE

WITH CHECK OPTION garantiert, daß die durch den View durchgeführten Einfügungen und Änderungen in Zeilen resultieren, die durch die View-Query selektiert werden können

CONSTRAINT ist der Name des CHECK OPTION-Constraints, default ist SYS_Cn (n integer)

Ein View kann dort verwendet werden, wo eine Tabelle in einer der folgenden SQL-Anweisungen zulässig ist: COMMENT DELETE INSERT LOCK TABLE UPDATE SELECT

Beispiel

CREATE VIEW dept20 (person, jahresgehalt) AS SELECT ename, sal * 12 annual_salary FROM emp WHERE deptno = 20

DROP CLUSTER

• Löscht einen Cluster aus der Datenbank

DROP CLUSTER [schema.]cluster [INCLUDING TABLES [CASCADE CONSTRAINTS]]

Existieren Tabellen bzw. Constraints ohne daß die Optionen angegeben wurden, wird eine Fehlermeldung geliefert.

DROP INDEX

• Löschen eines Index aus der Datenbank

DROP INDEX [schema.]index

DROP PROFILE

• Löschen eines Profils aus der Datenbank

DROP PROFILE profile [CASCADE]

Das DEFAULT-Profil kann nicht gelöscht werden. Ist das Profil noch Benutzern zugewiesen, muß CASCADE verwendet werden.

DROP ROLLBACK SEGMENT

• Entfernen eines Rollback-Segmentes aus der Datenbank

DROP ROLLBACK SEGMENT rollback_segment

DROP SEQUENCE

• Löschen einer Sequenz aus der Datenbank

Page 26: Oracle SQL im Überblick - inf.uni- · PDF fileOracle SQL im Überblick Editor: Klaus Philipp (Hochschulrechenzentrum Dortmund, E-Mail: K.Philipp@HRZ.Uni-Dortmund.de ) Dies ist ein

DROP SEQUENCE [schema.]sequence

DROP SNAPSHOT

• Entfernt einen Snapshot aus der Datenbank

DROP SNAPSHOT [schema.]snapshot

DROP SYNONYM

• Entfernen eines Synonyms aus der Datenbank

DROP [PUBLIC] SYNONYM [schema.]synonym

Beispiel DROP PUBLIC SYNONYM Aktienkurse

DROP TABLE

• Löschen einer Tabelle inklusive ihrer Indizes und Daten

DROP TABLE [schema.]table CASCADE CONSTRAINTS

DROP TABLESPACE

• Entfernt einen Tablespace aus der Datenbank

DROP TABLESPACE tablespace [INCLUDING CONTENTS [CASCADE CONSTRAINTS]]

CASCADE CONSTRAINTS löscht alle Integritätsbedingungen, die außerhalb des Tablespace liegen und sich auf Primärschlüssel beziehen.

Beispiel

DROP TABLESPACE user_3 INCLUDING CONTENTS CASCADE CONSTRAINTS

DROP USER

• Löscht einen Benutzer • Entfernt alle Objekte im Schema des Benutzers

DROP USER user [CASCADE]

CASCADE muß spezifiziert werden, wenn noch Objekte im Benutzerschema enthalten sind.

DROP VIEW

• Löscht einen View aus der Datenbank • Gleichzeitig werden alle Views entfernt, die im Rahmen dieses Views definiert

wurden.

Page 27: Oracle SQL im Überblick - inf.uni- · PDF fileOracle SQL im Überblick Editor: Klaus Philipp (Hochschulrechenzentrum Dortmund, E-Mail: K.Philipp@HRZ.Uni-Dortmund.de ) Dies ist ein

DROP VIEW [schema.]view

NOAUDIT

• Deaktiviert das Auditing, indem es die Wirkung eines vorhergehenden AUDIT-Kommandos teilweise oder ganz rückgängig macht

für SQL-Statements:

NOAUDIT statement_opt | system_priv, ... [BY user, ...] [WHENEVER [NOT] SUCCESSFUL]

Beispiele

NOAUDIT ROLE

NOAUDIT SELECT TABLE BY scott

für Schema-Objekte:

NOAUDIT object_opt, ... ON [schema.]object [WHENEVER [NOT] SUCCESSFUL]

Beispiel

NOAUDIT SELECT ON scott.emp

RENAME

• Ändert den Namen eines Schema-Objektes

RENAME old TO new

kann für Tabellen, Views, Sequenzen oder private Synonyme verwendet werden

Beispiel Reorganisieren einer Tabelle ohne vorherigen Export

CREATE TABLE temp (newname, col2, col3) AS SELECT oldname, col2, col3 FROM static

DROP TABLE static

RENAME temp TO static

TRUNCATE

• Löschen aller Zeilen einer Tabelle oder eines Clusters • Freigabe des von den Zeilen verwendeten Speicherplatzes

TRUNCATE TABLE [schema.]table | CLUSTER [schema.]cluster ---

Page 28: Oracle SQL im Überblick - inf.uni- · PDF fileOracle SQL im Überblick Editor: Klaus Philipp (Hochschulrechenzentrum Dortmund, E-Mail: K.Philipp@HRZ.Uni-Dortmund.de ) Dies ist ein

4. Datenmanipulation (DML)

Zur Datenmanipulation dienen die DELETE-, INSERT- und UPDATE-Statements.

DELETE

• Löschen einer oder mehrerer Zeilen einer Tabelle

DELETE FROM [schema.]table | view --- [WHERE condition]

Es werden alle Zeilen gelöscht, die dem Ausdruck condition genügen.

Bei einigen DBMS werden alle erfaßten Zeilen solange gesperrt, bis der DELETE-Befehl vollständig durchgeführt wurde. Dadurch kann eine vom Betriebssystem festgelegte maximale Anzahl von gleichzeitigen Sperren überschritten werden (---> LOCK TABLE)

Beispiele

DELETE FROM emp WHERE job = ´SALESMAN´ AND comm < 100

DELETE FROM blake.accounts@dallas

EXPLAIN PLAN

• Liefert den Ausführungsplan für ein SQL-Statement • kann die Kosten für die Ausführung einer Anweisung bestimmen

Beispiel

EXPLAIN PLAN SET STATEMENT_ID = ´Gehaltserhoehung in Dortmund´ INTO output FOR UPDATE emp SET sal = sal * 1.10 WHERE deptno = (select deptno FROM dept WHERE loc = ´DORTMUND´)

Die Tabelle output enthält dann Informationen über den Ausführungsplan und die Kosten.

INSERT

• Einfügen einer oder mehrerer neuer Zeilen in eine bestehende Tabelle

INSERT INTO [schema.]table | view[@dblink] [(column, ...)] {VALUES (expr, ...) | subquery}

expr, ... ist die Liste der Werte, die in die angegebenen Spalten column, ... eingefügt werden sollen. subquery = SELECT-Anweisung

ORACLE fügt die Daten in der Reihenfolge der angegebenen Spaltennamen in die Tabelle ein, falls keine Spaltennamen angegeben wurden, ist die Reihenfolge wie beim Erzeugen der Tabelle. Alternativ zur VALUES-Klausel, die lediglich die Eingabe einer einzelnen Zeile ermöglicht,

Page 29: Oracle SQL im Überblick - inf.uni- · PDF fileOracle SQL im Überblick Editor: Klaus Philipp (Hochschulrechenzentrum Dortmund, E-Mail: K.Philipp@HRZ.Uni-Dortmund.de ) Dies ist ein

ist die Angabe eines SELECT-Statements zulässig, dessen Resultat ebenso wie bei VALUES in die Tabelle eingefügt wird.

Beispiele

INSERT INTO emp (empno, ename, sal) VALUES (7810, ´MEIER´, 4900)

INSERT INTO bonus SELECT ename, job, sal, comm FROM emp WHERE comm > 0.25 * sal OR job IN (´PRESIDENT´, ´MANAGER´)

LOCK TABLE

• Sperrt eine Tabelle oder einen View und begrenzt den Zugriff darauf durch andere Benutzer

LOCK TABLE [schema.]table | view [@dblink] IN lockmode MODE [NOWAIT]

Beispiel

LOCK TABLE emp IN EXCLUSIVE MODE NOWAIT

UPDATE

• Ändern der Werte einer oder mehrerer Spalten von einer oder mehreren Zeilen einer Tabelle

UPDATE [schema.]table | view --- SET {(column, ...) = (subquery)}, ... | {column = expr | (subquery)}, ... [WHERE condition]

Wenn sich das Kommando auf alle Spalten beziehen soll, kann alternativ * eingegeben werden. Die Anzahl der Namen in col-list muß mit der Anzahl der Werte in expr-list übereinstimmen.

Beispiele

UPDATE emp SET comm = NULL WHERE job = ´TRAINEE´

UPDATE emp SET (sal, comm) = (SELECT 1.1 * AVG (sal), 1.5 * AVG (comm)) WHERE ename = ´MUELLER´

5. Der Select-Befehl

Die Select-Anweisung dient dem Retrieval. Das SELECT-Kommando ist die Anweisung mit der größten Komplexität. Das Ergebnis einer Datenbankabfrage kann durch die Angabe einer Vielzahl von Schlüsselwörtern beeinflußt werden (s. SQL-Referenz-Dokumentation).

SELECT [ALL | DISTINCT] select-list | * FROM [schema.]table | view ---

Page 30: Oracle SQL im Überblick - inf.uni- · PDF fileOracle SQL im Überblick Editor: Klaus Philipp (Hochschulrechenzentrum Dortmund, E-Mail: K.Philipp@HRZ.Uni-Dortmund.de ) Dies ist ein

[WHERE condition] [[START WITH condition] CONNECT BY condition] [GROUP BY column-list [HAVING condition]] [UNION | UNION ALL | INTERSECT | MINUS SELECT command] [ORDER BY {column-name [ASC | DESC]}, ...] [FOR UPDATE OF {[schema.]table. |view. column}, ... [NOWAIT]] * liefert alle Spalten von allen Tabellen oder Views, die in der FROM-Klausel aufgeführt sind START WITH CONNECT BY liefert die Zeilen in einer hierarchischen Reihenfolge GROUP BY gruppiert die selektierten Zeilen basierend auf dem Wert der Ausdrücke und liefert eine einzelne Zeile an Informationen je Gruppe HAVING analog WHERE FOR UPDATE sperrt die selektierten Reihen NOWAIT Benutzer erhält die Kontrolle, wenn eine Sperre nicht erworben werden konnte

WHERE conditions: expr rel-op expr expr [NOT] BETWEEN expr AND expr expr [NOT] IN (items) column-name [NOT] LIKE "string" [ESCAPE escape-character] column-name [NOT] MATCHES "string" [ESCAPE escape-character] expr rel-op {ALL | [ANY | SOME]} (SELECT-statement) expr [NOT] IN (SELECT-statement) [NOT] EXISTS (SELECT-statement) column-name IS [NOT] NULL

Nur die Angabe der SELECT-und der FROM-Klausel sind unbedingt erforderlich.

Beispiele

SELECT ename, job, sal, deptno FROM emp WHERE NOT (job = ´SALESMAN´AND deptno = 30)

SELECT LPAD (´ ´, 2* (LEVEL - 1)) || ename org_chart, empno, manager, job FROM emp START WITH job = ´PRESIDENT´ CONNECT BY PRIOR empno = manager

Ergebnis: ORG_CHART EMPNO MANAGER JOB ------------------- ------------------------ ---------------- ---------------- KOENIG 7839 PRESIDENT MEIER 7566 7839 ABT-LEITER SCHULZ 7788 7566 GRP-LEITER KUNZ 7876 7839 ABT-LEITER HINZ 7990 7876 GRP-LEITER ---

SELECT deptno, MIN (sal), MAX (sal) FROM emp GROUP BY deptno

Page 31: Oracle SQL im Überblick - inf.uni- · PDF fileOracle SQL im Überblick Editor: Klaus Philipp (Hochschulrechenzentrum Dortmund, E-Mail: K.Philipp@HRZ.Uni-Dortmund.de ) Dies ist ein

Ergebnis: DEPTNO MIN(SAL) MAX(SAL) -------------- --------------- ---------------- 10 1300 5000 20 800 3000

SELECT deptno, MIN (sal), MAX (sal) FROM emp WHERE job = ´VERTRIEBSBEAUFTRAGTER´ GROUP BY deptno HAVING MIN (sal) < 1000

Ergebnis: DEPTNO MIN(SAL) MAX(SAL) -------------- --------------- ---------------- 20 800 3000

SELECT ename, deptno, sal FROM emp WHERE job = ´SACHBEARBEITER´ ORDER BY deptno ASC, sal DESC

SELECT ename, emp.deptno, dname FROM emp, dept WHERE emp.deptno = dept.deptno

Ergebnis: ENAME DEPTNO DNAME ------------- -------------- ----------------- MEIER 10 BUCHHALTUNG MUELLER 10 BUCHHALTUNG SCHNEIDER 10 BUCHHALTUNG SCHMITT 20 VERKAUF KOWALSKI 20 VERKAUF