Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
se:datenbankentwicklung [2008-09-05 20:15] stefan |
se:datenbankentwicklung [2014-04-05 11:42] |
||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ====== Datenbankentwicklung ====== | ||
- | |||
- | ===== Administration ===== | ||
- | |||
- | ===== PL/SQL (Schwerpunkt der Klausur) ===== | ||
- | * PL/SQL: Procedural Language extension to SQL | ||
- | * Bietet eine Blockstruktur für Code an | ||
- | * Bietet prozedurale Konstrukte an (Variablen, Kontrollstrukturen etc.) | ||
- | * {{:se:plsqlarchitektur.jpg|}} | ||
- | * Vorteile | ||
- | * Integration in Oracle Tools | ||
- | * Modularisierte Anwendungsentwicklung | ||
- | * Portabilität des PL/SQL-Codes | ||
- | * Exception Handling | ||
- | * PL/SQL-Blöcke | ||
- | * Aufbau | ||
- | * DECLARE: Variablen, Cursor, eigene Exceptions | ||
- | * **BEGIN**: SQL und PL/SQL | ||
- | * EXCEPTION: Fehlerbehandlung | ||
- | * **END** | ||
- | * Typen | ||
- | * Anonymous | ||
- | * Procedure | ||
- | * Function | ||
- | * Speicherort: Server oder Anwendung | ||
- | * Variablen | ||
- | * ''[a-zA-Z][a-zA-Z0-9$_#]{0,29}'' | ||
- | * Deklarierung/Initialisierung in ''DECLARE'', Zuweisung in ''BEGIN'' | ||
- | * ''identifier [CONSTANT] datatype [NOT NULL] [:= | DEFAULT expr];'' | ||
- | * String-Begrenzung: ''q'!Das ist ein Text!''' | ||
- | * Typen | ||
- | * Scalar: ''CHAR, VARCHAR, LONG, INTEGER, BOOLEAN, DATE'' etc. | ||
- | * Composite: Zusammengesetzte Variablen aus mehrere Datentypen | ||
- | * Reference | ||
- | * LOB: Fotos, Filme etc. | ||
- | * Nicht-PL/SQL: Bind variables | ||
- | * Host-Variablen, die mit ''VARIABLE'' deklariert werden und mit einem führenden '':'' referenziert werden | ||
- | * ''SET AUTOPRINT ON'' | ||
- | * Substitution Variables | ||
- | * referenziert mit führendem ''&'': Eingabe zur Laufzeit | ||
- | * ''ACCEPT varname PROMPT 'Text''' | ||
- | * User Variable: deklariert mit ''DEFINE'', referenziert mit ''&'' | ||
- | * ''%TYPE''-Attribut: Datentyp einer Spalte/Variable übernehmen (''identifier table.column_name%TYPE;'') | ||
- | * Mögliche Boolean-Werte: ''TRUE, FALSE, NULL'' (!) | ||
- | * Lexikalische Einheiten | ||
- | * Folgen von Zeichen, Zahlen, Whitespace und Symbolen | ||
- | * Typen: Identifier, Delimiter, Literals, Comments | ||
- | * SQL-Funktionen | ||
- | * Nicht in PL/SQL verfügbar: ''DECODE'', ''GROUP''-Funktionen | ||
- | * SELECT in PL/SQL | ||
- | * ''INTO'' wird benötigt | ||
- | * Abfragen müssen genaue eine Zeile zurückliefern | ||
- | * Variablenpriorität: Spaltennamen -> lokale Variablen/Parameter -> Tabellennamen | ||
- | * Cursor | ||
- | * Zeiger auf den privaten Speicherplatz des Oracle-Servers | ||
- | * Implizit: werden intern vom Oracle-Server erzeugt und verwendet (z.B. bei SQL-Statements) | ||
- | * Attributes: ''SQL%FOUND'', ''SQL%NOTFOUND'', ''SQL%ROWCOUNT'' | ||
- | * Explizit: werden vom Programmierer definiert und verwendet | ||
- | * Kontrollstrukturen | ||
- | * ''IF THEN - ELSIF - ELSE''' | ||
- | * ''CASE'' Expression <> ''CASE'' Statement | ||
- | * Behandlung von NULL bei booleschen Operationen | ||
- | * Schleifen | ||
- | * ''LOOP - EXIT WHEN - END LOOP'' | ||
- | * ''WHILE LOOP - END LOOP'' | ||
- | * ''FOR IN LOOP - END LOOP'' | ||
- | * Nested Loops: Labels ''<<label_name>>'' | ||
- | * Komplexe Datentypen | ||
- | * Records | ||
- | * ein oder mehrere Felder (Scalar, Record, ''INDEX BY'') | ||
- | * werden üblicherweise eingesetzt, um Tabellenzeilen zu lesen | ||
- | * Deklaration mit ''TYPE'' | ||
- | * einfache Definition mit ''%ROWTYPE''' | ||
- | * Collections | ||
- | * ''INDEX BY'' tables / assoziative Arrays | ||
- | * 2 Spalten: Key (int/string) / Value | ||
- | * dynamische Länge | ||
- | * Zugriff über Index ''table(1)'' | ||
- | * verfügbare Methoden: ''EXISTS, COUNT, FIRST, LAST, PRIOR, NEXT, DELETE'' | ||
- | * VARRAYs und Nested Tables | ||
- | * Cursors | ||
- | * manuelle Aktionen: ''OPEN, [LOOP], FETCH, [EXIT], CLOSE'' | ||
- | * ''CURSOR FOR'' macht alles automatisch | ||
- | * Attribute: ''%ISOPEN, %NOTFOUND, %FOUND, %ROWCOUNT'' | ||
- | * entsprechen Pointern aus C (Referenz auf Speicherbereich) | ||
- | * Datentyp der Curosr-Variablen ist ''REF CURSOR'' | ||
- | * Cursor sind statisch, Cursor-Variablen sind dynamisch | ||
- | * Exceptions | ||
- | * Exceptions sind Fehler, die während der Programmausführung auftreten | ||
- | * Können implizit oder explizit ausgelöst werden | ||
- | * Behandlung: Handler oder weiterwerfen | ||
- | * Es sind mehrere Handler pro Block erlaubt, aber lediglich einer wird abgearbeitet. | ||
- | * Vorhandene Exceptions: z.B. ''NO_DATA_FOUND, TOO_MANY_ROWS, ZERO_DIVIDE'' | ||
- | * nicht vordefinierte Exceptions behandeln: ''PRAGMA EXCEPTION_INIT'' | ||
- | * Funktionen: ''SQLCODE, SQLERRM'' | ||
- | * Eigene Exceptions werfen: ''RAISE'' | ||
- | * Eigene Fehlermeldungen analog zum Oracle-Server ausgeben: ''RAISE_APPLICATION_ERROR'' (nur mit Nummer -20000 bis -20999) | ||
- | * Prozeduren und Funktionen | ||
- | * Subprograms, benannte PL/SQL-Blöcke | ||
- | * {{:se:anonymousblockssubprograms.jpg|}} | ||
- | |||
- | ===== Web ===== | ||
- | |||
- | ===== Modellierung ===== | ||