Datenbank - Objekte Views erzeugen Objekt Objekt Beschreibung Tabelle Basiseinheit zum Speichern; besteht aus View Zeilen und Spalten; Logische Repräsentation; kann Teilmengen von einer oder mehreren Tabellen enthalten Sequence Index Synonym Copyright © Oracle Corporation, 1998. All rights reserved. 12-2 Was ist eine View? Generiert Primärschlüsselwerte Erhöht die Performanz von Anfragen Erstellt alternative Namen für Objekte Copyright © Oracle Corporation, 1998. All rights reserved. Wozu braucht man Views? EMP Table EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ----- ------- --------- ----- --------- ----- ----- ------- 12-3 7839 KING PRESIDENT 17-NOV-81 5000 10 7698 BLAKE 7782 CLARK MANAGER 7839 01-MAY-81 2850 30 MANAGER 7839 09-JUN-81 2450 10 7566 JONES MANAGER 7839 02-APR-81 2975 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 20 30 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30 7900 JAMES CLERK 7698 03-DEC-81 950 7521 WARD SALESMAN 7698 22-FEB-81 1250 7902 FORD ANALYST 7566 03-DEC-81 3000 20 7369 SMITH CLERK 7902 17-DEC-80 800 20 7788 SCOTT ANALYST 7566 09-DEC-82 3000 20 7876 ADAMS CLERK 7788 12-JAN-83 1100 20 7934 MILLER CLERK 7782 23-JAN-82 1300 10 Copyright © Oracle Corporation, 1998. All rights reserved. 30 500 30 • Für Zugriffsbeschränkungen auf die Datenbank • Um komplexe Anfragen einfacher zu machen • Um unterschiedliche Sichten auf die gleichen Daten zu ermöglichen 12-4 Copyright © Oracle Corporation, 1998. All rights reserved. Einfache Views und Komplexe Views Erzeugung einer View • Eine Unterabfrage wird in die Definition des CREATE VIEW Statements eingebettet. Einfache Views Komplexe Views Anzahl Tabellen eine eine oder mehrere Mit Funktionen Nein Ja Mit Datengruppen Nein Ja DML durch View Ja Nein 12-5 Copyright © Oracle Corporation, 1998. All rights reserved. CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view [(alias[, alias]...)] AS subquery [WITH CHECK OPTION [CONSTRAINT constraint]] [WITH READ ONLY] • Die Unterabfrage kann ein komplexes SELECTStatement sein. • Die Unterabfrage darf kein ORDER BY enthalten. 12-6 Copyright © Oracle Corporation, 1998. All rights reserved. Beispiel Beispiel-View • Erzeuge eine View EMPVU10, die Details von Angstellten der Abteilung 10 enthält. • Gebrauch von ALIAS-Namen in der Unterabfrage SQL> 2 3 4 View SQL> 2 3 4 5 View CREATE VIEW AS SELECT FROM WHERE created. empvu10 empno, ename, job emp deptno = 10; • Beschreiben der Struktur der View mit dem SQL*Plus Kommando DESCRIBE CREATE VIEW AS SELECT FROM WHERE created. salvu30 empno EMPLOYEE_NUMBER, ename NAME, sal SALARY emp deptno = 30; • Die Spalten werden mit den ALIASNamen versehen SQL> DESCRIBE empvu10 12-7 Copyright © Oracle Corporation, 1998. All rights reserved. 12-8 Copyright © Oracle Corporation, 1998. All rights reserved. Daten in der View SQL> 2 SELECT * FROM salvu30; EMPLOYEE_NUMBER --------------7698 7654 7499 7844 7900 7521 NAME SALARY ---------- --------BLAKE 2850 MARTIN 1250 ALLEN 1600 TURNER 1500 JAMES 950 WARD 1250 6 rows selected. 12-9 Anfragen mit der View Copyright © Oracle Corporation, 1998. All rights reserved. SQL*Plus 7839 7782 7934 12-10 SQL> 2 3 4 5 View CREATE OR REPLACE VIEW empvu10 (employee_number, employee_name, job_title) AS SELECT empno, ename, job FROM emp WHERE deptno = 10; created. • Spaltenaliases in der CREATE VIEW Klausel werden in derselben Anordnung angegeben wie die Spalten in der Unterabfrage. 12-11 Copyright © Oracle Corporation, 1998. All rights reserved. EMPVU10 SELECT FROM WHERE KING PRESIDENT CLARK MANAGER MILLER CLERK empno, ename, job emp deptno = 10; EMP Copyright © Oracle Corporation, 1998. All rights reserved. Änderung einer View • Ändere die View EMPVU10 mit der CREATE OR REPLACE VIEW Klausel. Erzeuge ein ALIAS für jeden Spaltennamen. USER_VIEWS SELECT * FROM empvu10; Komplexe View Erzeugen einer komplexen View, die Gruppenfunktionen enthält und Werte aus zwei Tabellen. SQL> 2 3 4 5 6 7 View 12-12 CREATE VIEW AS SELECT FROM WHERE GROUP BY created. dept_sum_vu (name, minsal, maxsal, avgsal) d.dname, MIN(e.sal), MAX(e.sal), AVG(e.sal) emp e, dept d e.deptno = d.deptno d.dname; Copyright © Oracle Corporation, 1998. All rights reserved. Regeln zur Ausführung von DML Operationen in einer View • DML Operationen können in einfachen Views durchgeführt werden. • Ein Tupel kann in einer View nicht verändert werden wenn sie folgendes hat: • Eine View kann nicht geändert werden, wenn sie folgendes enthält: – Eine der Bedingungen aus der vorherigen Folie – Spalten, die durch Ausdrücke definiert werden – Die ROWNUM Pseudosplte • Daten können nicht zugefügt werden wenn: – Gruppenfunktionen – Die View eine der Bedingungen aus der – Eine GROUP BY Klausel vorherigen Folie enthält – NOT NULL Spalten in der Basistabelle sind, die nicht von der View ausgewählt werden. – Das DISTINCT Schlüsselwort 12-13 Copyright © Oracle Corporation, 1998. All rights reserved. Verwendung der WITH CHECK OPTION Klausel SQL> 2 3 4 5 View CREATE OR REPLACE VIEW empvu20 AS SELECT * FROM emp WHERE deptno = 20 WITH CHECK OPTION; created. • WITH CHECK OPTION garantiert, dass Einfügungen und Änderungen nur in Tupeln durchgeführt werden, die durch die View-Query selektiert werden können . 12-15 Regeln zur Ausführung von DML Operationen in einer View Copyright © Oracle Corporation, 1998. All rights reserved. 12-14 Copyright © Oracle Corporation, 1998. All rights reserved. Verweigern von DML Operationen • Mit der Option WITH READ ONLY kann man sichern, dass keine DML Operationen auf der VIEW durchgeführt werden. SQL> 2 3 4 5 6 View 12-16 CREATE OR REPLACE VIEW empvu10 (employee_number, employee_name, job_title) AS SELECT empno, ename, job FROM emp WHERE deptno = 10 WITH READ ONLY; created. Copyright © Oracle Corporation, 1998. All rights reserved. View löschen Wird eine View gelöscht, so gehen keine Daten verloren. Sequenzen, Indizees, Synonyme DROP VIEW view; SQL> DROP VIEW empvu10; View dropped. 12-17 Copyright © Oracle Corporation, 1998. All rights reserved. Copyright © Oracle Corporation, 1998. All rights reserved. Datenbank - Objekte Objekt Tabelle Beschreibung Basiseinheit zum Speichern; besteht aus Was ist eine Sequenz ? • Automatisch generierte Abfolge von Zahlen Zeilen und Spalten; View Logische Repräsentation; kann Teilmengen von einer oder mehreren Tabellen enthalten Sequenz Generiert Primärschlüsselwerte Index Erhöht die Performanz von Anfragen Synonym Erstellt alternative Namen für Objekte 12-19 Copyright © Oracle Corporation, 1998. All rights reserved. • Ist ein Objekt, das von mehreren anderen Objekten benutzt werden kann • Eine typische Anwendung ist die Erzeugung eines Primärschlüssels • Verbessert die Effizienz 12-20 Copyright © Oracle Corporation, 1998. All rights reserved. Das CREATE SEQUENCE Statement Definiere eine Sequenz zur automatischen Generierung sequentieller Zahlen CREATE SEQUENCE sequence [INCREMENT BY n] [START WITH n] [{MAXVALUE n | NOMAXVALUE}] [{MINVALUE n | NOMINVALUE}] [{CYCLE | NOCYCLE}] [{CACHE n | NOCACHE}]; Copyright © Oracle Corporation, 1998. All rights reserved. 12-21 Beispiel • Erzeuge eine Sequenz DEPT_DEPTNO die als Primärschlüssel in der DEPT Tabelle verwendet wird. • Ohne CYCLE option. SQL> CREATE SEQUENCE dept_deptno 2 INCREMENT BY 1 3 START WITH 91 4 MAXVALUE 100 5 NOCACHE 6 NOCYCLE; Sequence created. 12-22 Überprüfung von Sequenzen • In der Tabelle des Data Dictionary USER_SEQUENCES. SQL> SELECT 2 3 FROM sequence_name, min_value, max_value, increment_by, last_number user_sequences; • Die Spalte LAST_NUMBER column gibt die nächst mögliche Sequenznummer an. 12-23 Copyright © Oracle Corporation, 1998. All rights reserved. Copyright © Oracle Corporation, 1998. All rights reserved. Die Pseudospalten NEXTVAL und CURRVAL • NEXTVAL gibt den nächsten möglichen Sequenzwert zurück CURRVAL gibt den gerade verwendeten Sequenzwert an NEXTVAL muss den Wert liefern, bevor CURRVAL einen Wert enthält 12-24 Copyright © Oracle Corporation, 1998. All rights reserved. Beispiel • Gib eine neue Abteilung “MARKETING” in San Diego ein. SQL> INSERT INTO 2 VALUES 3 1 row created. dept(deptno, dname, loc) (dept_deptno.NEXTVAL, 'MARKETING', 'SAN DIEGO'); Verwendung von Sequenzen • Durch Caching der Sequenzwerte im Speicher wird eine schnellere Verarbeitung erreicht. • Lücken in den Sequenzwerten können entstehen wenn: – ein Rollback ausgeführt wird • Zeige den verwendeten Wert aus der DEPT_DEPTNO Sequenz. SQL> SELECT 2 FROM 12-25 – das System abstürzt – Eine Sequenz in einer anderen Tabelle dept_deptno.CURRVAL dual; Copyright © Oracle Corporation, 1998. All rights reserved. Änderung einer Sequenz •Änderung des Inkrement-Wertes, verwendet wird 12-26 Copyright © Oracle Corporation, 1998. All rights reserved. Anweisung zur Änderung einer Sequenz •maximum-Wertes, •minimum Wertes, •Zyklus –Option oder • Cache Option. SQL> ALTER SEQUENCE dept_deptno 2 INCREMENT BY 1 3 MAXVALUE 999999 4 NOCACHE 5 NOCYCLE; Sequence altered. 12-27 Copyright © Oracle Corporation, 1998. All rights reserved. • Man muss Besitzer der Sequenz sein und das ALTER-Privilege für die Sequenz haben. • Nur künftige Sequenz-Werte können erzeugt werden. • Die Sequenz muss gelöscht und neu erzeugt werden, wenn man neue Nummerierung wünscht 12-28 Copyright © Oracle Corporation, 1998. All rights reserved. Löschen einer Sequenz • Mit dem DROP SEQUENCE Statement. SQL> DROP SEQUENCE dept_deptno; Sequence dropped. Was ist ein Index? • Ein Pointer auf Tupel, um den Zugriff schneller zu machen • Der Index ist unabhängig von der Tabelle • Automatisches Anlegen und Benutzen des Indexes bei Oracle 12-29 Copyright © Oracle Corporation, 1998. All rights reserved. 12-30 Wie wird ein Index angelegt? Copyright © Oracle Corporation, 1998. All rights reserved. Anlegen eines Indexes • Für eine oder mehrere Spalten • Automatisch – Ein eindeutiger Index wird automatisch bei der Definition der PRIMARY KEY und der UNIQUE Constraint angelegt. • Manuell – Der Benutzer kann einen nicht- eindeutigen Index anlegen, um die Ausführungszeit zu verringern. 12-31 Copyright © Oracle Corporation, 1998. All rights reserved. CREATE INDEX index ON table (column[, column]...); • Verbessert die Geschwindigkeit der Ausführung der ENAME Spalte in der EMP Tabelle. SQL> CREATE INDEX 2 ON Index created. 12-32 emp_ename_idx emp(ename); Copyright © Oracle Corporation, 1998. All rights reserved. Wann sollte ein Index angelegt werden • Die Spalte wird häufig in der WHERE-Klausel oder in der Join-Bedingung gebraucht. • Die Werte in der Spalte weichen stark voeinander ab. • Die Spalten beinhalten eine große Zahl von NULL-Werten. • Zwei oder mehr Spalten werden häfig zusammen in der WHERE-Klausel oder der JoinBedingung gebraucht. Wann sollte kein Index angelegt werden? • Die Tabelle ist klein • Die Spalten werden nicht oft in den Anfragen gebraucht • Die meisten Anfragen bringen mehr als 2–4% der Tupel • Die Tabelle wird oft geändert • Die Tabelle ist gross und die meisten Anfragen werden nicht mehr als 2–4% der Tupel bringen. Copyright © Oracle Corporation, 1998. All rights reserved. 12-33 12-34 Copyright © Oracle Corporation, 1998. All rights reserved. Überprüfen des Index Löschen des Index • Die Data Dictionary View USER_INDEXES enthält den Namen des Index und seine Eindeutigkeit • Löschen des Index aus dem Data Dictionary. • Die View USER_IND_COLUMNS enthält den Indexnamen, den Tabellennamen und den Spaltennamen. SQL> DROP INDEX index; • Beispiel SQL> DROP INDEX emp_ename_idx; Index dropped. SQL> 2 3 4 5 12-35 SELECT FROM WHERE AND ic.index_name, ic.column_name, ic.column_position col_pos,ix.uniqueness user_indexes ix, user_ind_columns ic ic.index_name = ix.index_name ic.table_name = 'EMP'; Copyright © Oracle Corporation, 1998. All rights reserved. • Man muss Besitzer des Index sein oder das DROP ANY INDEX Privileg haben. 12-36 Copyright © Oracle Corporation, 1998. All rights reserved. Erzeugung und Löschen eines Synonyms Synonyme Einfacher Zugriff auf Objekte durch Erzeugung eines anderen Namens für ein Objekt. • Verweis auf eine Tabelle eines Besitzers durch einen anderen Nutzer • Verkürzung langer Namen CREATE [PUBLIC] SYNONYM synonym FOR object; 12-37 Copyright © Oracle Corporation, 1998. All rights reserved. • Erzeugen eines verkürzten Namens für die View DEPT_SUM_VU. SQL> CREATE SYNONYM d_sum 2 FOR dept_sum_vu; Synonym Created. • Löschen des Synonyms. SQL> DROP SYNONYM d_sum; Synonym dropped. 12-38 Copyright © Oracle Corporation, 1998. All rights reserved.