Vorbereitungen zum 3. Praktikum (PL/SQL):

Ähnliche Dokumente
Prozedurale SQL-Erweiterungen

Prozedurale Datenbank- Anwendungsprogrammierung

Einführung in PL/SQL

Explizite Cursor. Cursor. Steuerung des expliziten Cursors. Explizite Cursor Funktionen

Einführung in PL/SQL

Funktionen. Überblick über Stored Functions. Syntax zum Schreiben einer Funktion. Schreiben einer Funktion

Kapitel 4 Dynamisches SQL

Dynamisches SQL. Folien zum Datenbankpraktikum Wintersemester 2009/10 LMU München

Kapitel 4 Dynamisches SQL

Boolean Wertemenge: Wahrheitswerte {FALSE,TRUE}, auch {0,1} Deklaration:

Kapitel 9. Embedded SQL. Prof. Dr. Wolfgang Weber Vorlesung Datenbanken 1

Arbeit mit zusammengesetzten Datentypen

Arithmetik in der tcsh

Dipl. Inf. Dipl. Math. Y. Orkunoglu Datum:

Eigene Funktionen innerhalb von pgsql

Powerful PL/SQL: Collections indizieren mit VARCHAR2-Indizes

WS 2010/11 Datenbanksysteme Fr 15:15 16:45 R Vorlesung #3. SQL (Teil 1)

Inhaltsverzeichnis. Inhalt. 1 Einführung in die Datenbanktechnologie

Operatoren für elementare Datentypen Bedingte Anweisungen Schleifen. Operatoren für elementare Datentypen Bedingte Anweisungen Schleifen

Zusammengesetzte Datentypen

Grundlagen der Informatik

Oracle Datenbankprogrammierung mit PL/SQL Grundlagen

PL/pgSQL. VL Datenbanksysteme. Ingo Feinerer

Übersicht der wichtigsten MySQL-Befehle

Themen des Kapitels. 2 Grundlagen von PL/SQL. PL/SQL Blöcke Kommentare Bezeichner Variablen Operatoren. 2.1 Übersicht. Grundelemente von PL/SQL.

Powerful PL/SQL: Collections indizieren mit VARCHAR2- Indizes ein Praxisbeispiel

[ SQL] Wissen, das sich auszahlt

Oracle PL/SQL - Grundlagen

Ausnahmebehandlung. Ausnahmebehandlung mit PL/SQL. Ausnahmetypen. Ausnahmebehandlung

Operatoren für elementare Datentypen Bedingte Anweisungen Schleifen. Programmieren I. Martin Schultheiß. Hochschule Darmstadt Wintersemester 2010/2011

Einführung in den Einsatz von Objekt-Orientierung mit C++ I

PROCESSING EINE ZUSAMMENFASSUNG. Created by Michael Kirsch & Beat Rossmy

Kontrollstrukturen in PL/SQL

Datenbanken 1 und Objektorientierte Datenbanken

Oracle SQL. Seminarunterlage. Version vom

Entwicklungsumgebung für die Laborübung

float: Fließkommazahl nach IEEE 754 Standard mit 32 bit

MySQL-Befehle. In diesem Tutorial möchte ich eine kurze Übersicht der wichtigsten Befehle von MySQL geben.

Klausur PI Datenbanken II vom Name: Praktische Informatik (Krägeloh)

10. Programmieren in SQL

1 Aufgaben 1.1 Umgebungsvariable setzen: CLASSPATH

JAVA-Datentypen und deren Wertebereich

Unterlagen. CPP-Uebungen-08/

Programmiertechnik Kontrollstrukturen

Oracle 10g Einführung

Struktur von PL/SQL. Oracle PL/SQL Die Programmiersprache von Oracle. Ein Beispiel. Bildschirmausgabe. Using Oracle PL/SQL.

Modellierung und Programmierung 1

4.4 Imperative Algorithmen Verzweigung und Iteration

insert, update, delete Definition des Datenbankschemas select, from, where Rechteverwaltung, Transaktionskontrolle

Strukturierte Objekttypen

Steuerungsstrukturen. Ablaufsteuerung der PL/SQL Ausführung. IF Anweisungen. Einfaches IF

PL/pgSQL. VU Datenbanksysteme. Reinhard Pichler

Inhaltsverzeichnis. Einleitung

Vorlesung Datenbanksysteme vom PL/SQL (von Oracle) Einführung Deklarationen Cursor Ablaufsteuerung Fehlerbehandlung stored program units

Prakt. Datenbankprogrammierung. Sommersemester 2005

Abschnitt 5. Grundlagen der funktionalen & imperativen Programmierung

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik Kontrollstrukturen

SQL (Structured Query Language) Schemata Datentypen

Datenbank und Tabelle mit SQL erstellen

Übung PL/SQL Trigger Lösungen

C++ Teil 2. Sven Groß. 16. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 22

Kapitel 3: Variablen

Java - Schleifen. Bedingung. wiederhole. Anweisung Anweisung Anweisung. Leibniz Universität IT Services Anja Aue

Anleitung Anleitung Anleitung Anleitung Anleitung Anleitung Anleitung Anleitung Anleitung

Schachtelung der 2. Variante (Bedingungs-Kaskade): if (B1) A1 else if (B2) A2 else if (B3) A3 else if (B4) A4 else A

Angewandte Mathematik und Programmierung

Algorithmen als systematische Vorgehensweisen zur Lösung eines formal definierten Problems

Java Anweisungen und Ablaufsteuerung

4. Objektrelationales Typsystem Kollektionstypen. Nested Table

PIC16 Programmierung in HITECH-C

Es geht also im die SQL Data Manipulation Language.

Oracle PL/SQL Marco Skulschus Marcus Wiederstein

JavaScript. Dies ist normales HTML. Hallo Welt! Dies ist JavaScript. Wieder normales HTML.

CADSTAR MRP-Link. MRP-Link ist erstellt von:

Abfragen (Queries, Subqueries)

Algorithmen als systematische Vorgehensweisen zur Lösung eines formal definierten Problems

Vorkurs Informatik WiSe 16/17

Neuerungen in Marco Patzwahl MuniQSoft GmbH Unterhaching

Objektorientierung unter Oracle richtet sich einerseits nach objekt-orientierten Programmiersprachen wie Java,

Java Ablaufsteuerung (Beispiele)

(Aufgaben zu Wertzuweisungen siehe Vorlesungsbeilage S. 49)

3. Anweisungen und Kontrollstrukturen

Einfache Rechenstrukturen und Kontrollfluss

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke

Korrekturen und Ergänzungen zur ABAP-Referenz

1 Bedingte Anweisungen. 2 Vergleiche und logische Operatoren. 3 Fallunterscheidungen. 4 Zeichen und Zeichenketten. 5 Schleifen.

Folien php/mysql Kurs der Informatikdienste

Grundlagen von SQL. Informatik 2, FS18. Dr. Hermann Lehner (Material von Dr. Markus Dahinden) Departement Informatik, ETH Zürich

SQL,Teil 1: CREATE, INSERT, UPDATE, DELETE, DROP

Teil 5 - Java. Programmstruktur Operatoren Schlüsselwörter Datentypen

5/14/18. Grundlagen von SQL. Grundlagen von SQL. Google, Facebook und Co. setzen auf SQL. Whatsapp

Transkript:

Vorbereitungen zum 3. Praktikum (PLSQL): SQL ist eine nicht-prozedurale Sprache der 4. Generation, die es nicht erlaubt, Elemente von 3.-Generation-Sprachen (Schleifen, Verzweigungen, etc.) zu benutzen. Daher gibt es in professionellen DB-Systemen Spracherweiterungen, die bei Oracle PLSQL (Programming Language) genannt wird. In PLSQL können Schleifen, Verzweigungen, Prozeduren, Funktionen, globale und lokale Variablen benutzt werden. SQL-Befehle sind in diesen prozeduralen Programmen eingebettet. Im Praktikum werden wir PLSQL mit dem Cursor-Konzept anwenden. 1. Anleitung zu PLSQL 1.1 Aufbau eines PLSQL-Blocks PLSQL ist blockorientiert. Der PLSQL-Block nt (1)mit der Deklaration von Variablen, eingeleitet durch das Schlüsselwort. Der ausführbare Teil (2) des Codes startet mit BEGIN. Mit der EXCEPTION können Ausnahmesituationen (3) behandelt werden. Der erste und dritte Teil können fehlen (Wir werden in diesem Praktikum Teil 3 weglassen.). Ein Block wird als Skript in einer Datei abgelegt und mit START in SQLPLUS aufgerufen werden (letzte Zeile: ""). Jede Anweisung endet mit ";".Groß- und Kleinschreibung ist irrelevant. PLSQL-Block: Datendeklaration BEGIN SQL- und PLSQL-Anweisungen EXCEPTION Behandlung von Ausnahmen END; 1.2 Datendeklaration Jede Variable, die in einem PLSQL-Block benutzt wird, muss vorher deklariert werden. Es gibt die Typen CHAR, VARCHAR, NUMBER, DATE, ROWID und BOOLEAN. v1 char(1); n number; s boolean; Seite 1

Diese Variablen haben den Anfangswert NULL, wenn sie nicht initialisiert werden. Beispiele: v2 char(5) := 'ABCDE'; -- Textvariable v3 number(6,2) not null := 0; -- darf niemals NULL sein v4 boolean := TRUE; v6 number(100,2) := v3 + 100; Die Namen von vorhandenen Spalten von Tabellen, die in select- oder update- Befehlen innerhalb der Programme verwendet werden, müssen nicht deklariert werden. Mit Hilfe des Zusatzes "%TYPE" kann man Variablen deklarieren, die den Datentyp der Spalte einer Tabelle haben, z.b.: V_Stdg Vorlesungen.Studiengang%type deklariert die Variable V_Stdg, die den Typ des Attributes Studiengang der Tabelle Vorlesungen erthält. 1.3 Geschachtelte PLSQL-Blöcke Schachtelungen sind nur im Ausführungs- und Ausnahmebehandlungsteil möglich. Eine Variable ist lokal bzgl. eines Blocks, wenn sie in ihm deklariert ist. Eine Variable ist global bezüglich eines Blocks (und somit in ihm auch gültig), wenn sie nicht in ihn, sondern in einem übergeordneten Block deklariert ist. 1.4 Kontrollstrukturen und Operatoren 1.1. Anweisungen und Zuweisungen Leere Anweisung null; Zuweisungsoperator := ( a := 70; ) Zuweisung mittels select: Werte über Spaltennamen aus der Datenbank werden in Variablen eines PLSQL-Blocks mit Hilfe des Schlüsselwortes INTO übertragen. SELECT COUNT(*) INTO anzahl FROM ARTIKEL; 1.2. Arithmetische Operatoren + Addition, - Subtraktion, * Multiplikation, Division Endpreis := Preis * Steuersatz; Bonus := AktuellerWert + 0.10; 1.3. Vergleichsoperatoren und logische Operatoren = Gleichheit,!= oder <> Ungleichheit, <=, >=, <, > größerkleiner (oder gleich) AND Konjunktion, OR Disjunktion, NOT Negation IF Konto <= kontominimum THEN UPDATE... Seite 2

IF Konto > 4000 AND Wert <= 7000 THEN UPDATE... 1.4. Verzweigung if Bedingung then Anweisungsfolge A else Anweisungsfolge B end if; Der else-teil kann entfallen; "end if" ist Pflicht. IF somecursor%notfound -- Cursor liefert keine weiteren Elemente? -- %notfound: Siehe 1.4 unter 1.5 Cursor-Konzept THEN INSERT INTO sometable VALUES(value1, value2); END IF; 1.5. Schleifen Es gibt drei Formen von Schleifen: 1. bedingungslos: LOOP 2. Zählschleife: FOR Zaehlbereich LOOP FOR i IN 1..3 LOOP -- i läuft von 1 bis 3 -- Block dreimal ausführen 3. bedingte Schleife: WHILE Bedingung LOOP WHILE somevariable <= somelimit Die bedingungslose Schleife ist eine unendliche Schleife, wenn in ihr keine Anweisung (und kein exit) vorkommt. Die Schleife wird mit der exit-anweisung Seite 3

verlassen. Darüber hinaus ist es möglich mit GOTO und Marken (<<marke>>) zu arbeiten, um gezielte Sprünge zu machen. Mit der Anweisung "exit when Bedingung" kann man direkt an das exit eine Bedingung knüpfen. 1.5 Cursor-Konzept 1.1. Im Allgemeinen liefert der select-befehl eine Menge von Zeilen. Um solche Mengen der Reihe nach abarbeiten zu können, gibt es in PLSQL das Cursor- Konzept. Ein Cursor wird deklariert, eröffnet, gelesen und geschlossen. Bei der Deklaration eines Cursors wird eine Teilmenge einer Tabelle oder eine Verknüpfung mehrerer Tabellen definiert. Der Cursor zeigt auf genau einen Wert (eine Zeile, ein Tupel) der Ergebnismenge und wird nach bestimmten Regeln auf einen weiteren Wert geschaltet. 1.2. Deklaration eines expliziten Cursors Im Deklarationsteil eines PLSQL-Blocks wird ein Cursor definiert. Der Cursor erhält dabei einen Namen und die Definition über einen select-befehl, der einfach sein kann oder über joins mit where-bedingungen und order by- Klauseln definiert werden kann. Beispiele: cursor c1 is select * from artikel; cursor c2 is select preis, name from artikel where art_id = &1; Cursor c1 liefert alle Zeilen mit allen Spalten der Tabelle artikel, c2 liefert nur explizit angegebene Spalten der Artikel unter einer benutzereingegebenen Bedingung. 1.3. Sequentielles Lesen eines Cursors Die Anweisungen open, fetch und close erlauben das sequentielle Lesen eines wie oben definierten Cursors. Der FETCH-Befehl liest Daten in Variablen und setzt den Cursor auf den nächsten (nach der Definition) relevanten Datensatz. FETCH c1 INTO var1, var2,...; c1 ist der Name eines Cursors und var1, var2,... sind Namen von Variablen, die im -Teil des PLSQL-Blocks definiert sein müssen und in Anzahl, Datentyp und Reihenfolge den Spalten des Cursor-Deklaration entsprechen müssen. create table bericht ( s1 char(15); Seite 4

); s2 varchar(20); s3 number(9,2) Diese Tabelle muss vor dem folgenden PLSQL-Block definiert sein. cursor c1 is select ISBN, TITEL, PREIS from BUCH; v_isbn BUCH.ISBN%type; v_titel BUCH.TITEL%type; v_preis BUCH.PREIS%type; anzahl number := 0; -- Anzahl der gefunden Buecher schranke number := &Schranke; -- Eingabe des Benutzers open c1; fetch c1 into v isbn, v_titel, v_preis; while c1%found loop if v_preis > schranke then anzahl := anzahl + 1; insert into bericht values (v_isbn, v_titel, v_preis); end if; fetch c1 into v isbn, v_titel, v_preis; end loop; close c1; 1.4. Attribute zur Kontrolle des Cursors (am Beispiel von c1) c1%isopen true, wenn Cursor geöffnet ist, sonst false c1%found true, wenn fetch-befehl auf einen Datensatz zeigt, sonst false c1%notfound true, wenn fetch-befehl auf keinen Datensatz zeigt (am Ende) c1%rowcount gibt an, wie viel Zeilen mit dem open-befehl geladen wurden 1.5. Strukturvariable Eine Strukturvariable hat denselben Aufbau wie eine Zeile einer Tabelle oder eines Cursors. Man verwendet für eine Strukturvariable den Namenszusatz %rowtype. 1.6. declare cursor aktbuch is...; Seite 5

BuchRec aktbuch%rowtype; loop fetch aktbuch into BuchRec; exit when AktBuch%notfound;... end loop; 1.7. Update mit einem Cursor Bei der Vereinbarung eines Cursors kann im SELECT-Befehl die Klausel FOR UPDATE angegeben werden. Sie erlaubt, die ausgewählten Datensätze zu verändern. In diesem Fall wird die Ergebnismenge des Cursors gesperrt, andere Benutzer können nicht darauf zugreifen, solange die Sätze aktualisiert werden. Bei update-befehl muss die Klausel "where current of c1" (bei Cursor c1) verwendet werden. cursor c1 is select gebiet from fachbuch for update of gebiet; satz c1%rowtype; for satz in c1 loop update fachbuch set gebiet = 'EDV' where current of c1; -- aktuellen Datensatz des Cursors end loop; -- ändern 1.6 Bildschirmausgabe mittels Package dbms_output dbms_output ist ein Prozeduren-Standardpaket von Oracle, mit denen u.a. Ausgaben am Bildschirm ausgeführt werden können. Wichtig ist, dass die Umgebungsvariable serveroutput eingeschaltet ist (s. nächster Abschnitt). set serveroutput on; declare wert NUMBER(9); select count(*) into wert from lieferant; dbms_output.put_line('wert ist: ' wert); Seite 6

Mit dem Verknüpfungszeichen (pipelining) kann ein Variablenwert z.b. an einen Textstring angehangen werden. 2. SQLPLUS Script-Definitionen &-Parameter: Bei Aufruf ohne Parameter wird bei jedem &-Parameter-Vorkommen der Benutzer nach dem aktuellen Wert gefragt. Kommentare: *... * für länger Kommentare (über mehrere Zeilen) -- Kommentar bis zum Ende der Zeile Umgebungsvariablen anzeigen lassen: show all Umgebungsvariablen setzen (am Beispiel): set serveroutput on. Seite 7