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
31
Embed
Oracle SQL im Überblick - inf.uni- · PDF fileOracle SQL im Überblick Editor: Klaus Philipp (Hochschulrechenzentrum Dortmund, E-Mail: [email protected] ) Dies ist ein
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
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
• 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
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.
(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
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
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
- 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:
() ü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)
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
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
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
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
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
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
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 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
• 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 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
• 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
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:
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
• 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.
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
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
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
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
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.
DROP VIEW [schema.]view
NOAUDIT
• Deaktiviert das Auditing, indem es die Wirkung eines vorhergehenden AUDIT-Kommandos teilweise oder ganz rückgängig macht
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
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,
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
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).
[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