Einführung in PL/SQL



Ähnliche Dokumente
Einführung in PL/SQL

Prozedurale Datenbank- Anwendungsprogrammierung

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

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

Vorbereitungen zum 3. Praktikum (PL/SQL):

Gesicherte Prozeduren

Funktion definieren Gibt Summe der Gehälter zurück. Aufruf in einem SQL-Statement

Prozedurale SQL-Erweiterungen

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

Oracle Datenbankprogrammierung mit PL/SQL Grundlagen

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

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

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

Oracle 12c: Neuerungen in PL/SQL. Roman Pyro DOAG 2014 Konferenz

Arbeit mit zusammengesetzten Datentypen

ORACLE9i: PL/SQL PL/SQL. Inhalt. Einführung. Deklarationsteil. Ausführungsteil. Cursorkonzept. Ausnahmebehandlung

Ausnahmebehandlung. Ausnahmebehandlung mit PL/SQL. Ausnahmetypen. Ausnahmebehandlung

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

Whitepaper. Produkt: combit Relationship Manager. Datensatzhistorie mit dem SQL Server 2000 und combit GmbH Untere Laube Konstanz

SQL (Structured Query Language) Schemata Datentypen

Fakultät für Informatik & Wirtschaftsinformatik DB & IS II - SS Metadaten

Übersicht Programmablaufsteuerung

Datentypen. Agenda für heute, 4. März, Pascal ist eine streng typisierte Programmiersprache

Modul 122 VBA Scribt.docx

Unterprogramme. Funktionen. Bedeutung von Funktionen in C++ Definition einer Funktion. Definition einer Prozedur

Einführung in die C++ Programmierung für Ingenieure

O REILLY. Oracle PL/SQL Programmierung Paris - - Steven Feuerstein. mit Bill Pribyl. Deutsche Übersetzung von Dorothea Reder 2.

Universität Stuttgart Abteilung Anwendersoftware Steht für Embedded SQL in Java. - Java-Methoden als SQL Stored-Procedures

Crash-Kurs PL/SQL. Martin Landvoigt

Einführung in die Programmierung

Hochschule Karlsruhe Technik und Wirtschaft Anhänge: Fakultät für Informatik und Wirtschaftsinformatik SS 2013 Prof. Schmidt.

Objektorientierte Programmierung

Grundlagen der Programmierung Prof. H. Mössenböck. 3. Verzweigungen

Oracle: Abstrakte Datentypen:

8 Zugriffstypen ( Zeiger )

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

PL/SQL. Deklaration von Variablen. Inhalt. PL/SQL Block Struktur. PL/SQL Block Struktur

Geschäftslogik in die Datenbank Umstellung eines Kernbanksystems

Funktionale Programmierung mit Haskell

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

Oracle SQL Tutorium - Wiederholung DB I -

Programmierung in C. Grundlagen. Stefan Kallerhoff

Kontrollstrukturen und Funktionen in C

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Kapitel 4 Dynamisches SQL

Erweiterung der Aufgabe. Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen:

Prozeduren und Trigger in Datenbanken

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

7. Datenbank-Zugriff. Vorlesung und Übung Dr. Peter Pfahler Institut für Informatik Universität Paderborn. Zum Beispiel aus PHP-Skripten: Client 7-2

Schmitt, Günter (1996): Fortran 90 Kurs technisch orientiert, R. Oldenbourg Verlag, München

Nachtrag: Farben. Farbblindheit. (Light und Bartlein 2004)

3. Stored Procedures und PL/SQL

CARL HANSER VERLAG. Christopher Allen. Oracle PL/SQL für Einsteiger Der Einsatz von SQL und PL/SQL in der Oracle-Datenbank

Java 7. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Dezember 2011 JAV7

Modellierung und Programmierung 1

Suchmaschinen. Universität Augsburg, Institut für Informatik SS 2014 Prof. Dr. W. Kießling 23. Mai 2014 Dr. M. Endres, F. Wenzel Lösungsblatt 6

Einführung in die Programmierung

Extracting Business Rules from PL/SQL-Code

E-PRIME TUTORIUM Die Programmiersprache BASIC

Java Database Connectivity (JDBC) Walther Rathenau Gewerbeschule 1

Erwin Grüner

Mengenvergleiche: Alle Konten außer das, mit dem größten Saldo.

Visual Basic Basisbefehle Hinweis: Der Text in eckigen Klammern [ ] ist variabel, z.b. [var] => 5.3. Eckige Klammern sind stets wegzulassen!

Kapitel 33. Der xml-datentyp. In diesem Kapitel: Der xml-datentyp 996 Abfragen aus xml-datentypen 1001 XML-Indizierung 1017 Zusammenfassung 1023

SQL and PL/SQL unleashed. Neuheiten bei Oracle 11g und Oracle 12c im Bereich SQL und PL/SQL

cs241: Datenbanken mit Übungen HS 2011

2. Datenbank-Programmierung

php Hier soll ein Überblick über das Erstellen von php Programmen gegeben werden. Inhaltsverzeichnis 1.Überblick Parameterübergabe...

Mail direkt aus Oracle versenden - komfortabel und mit Umlauten

Datenbanken SQL Einführung Datenbank in MySQL einrichten mit PhpMyAdmin

5 DATEN Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu

Sin-Funktion vgl. Cos-Funktion

Oracle PL/SQL - Grundlagen

11 Funktionen Vorteile von Funktionen. Leseprobe aus Access und SQL Server

Leseprobe: SQL mit MySQL - Band 4 Kompendium mit Online-Übungs-DB. Kompendium zur schnellen Kurzinformation der Datenbanksprache SQL/MySQL 5.

SQL: statische Integrität

Programmieren in C. Macros, Funktionen und modulare Programmstruktur. Prof. Dr. Nikolaus Wulff

C/C++ Programmierung

PL/pgSQL. VU Datenbanksysteme. Reinhard Pichler

MIN oder MAX Bildung per B*Tree Index Hint

Access [basics] Aktionsabfragen per VBA ausführen. Beispieldatenbank. Aktionsabfragen. Die Execute-Methode. Datenzugriff per VBA

Relationales Modell: SQL-DDL. SQL als Definitionssprache. 7. Datenbankdefinitionssprachen. Anforderungen an eine relationale DDL

Java Kurs für Anfänger Einheit 5 Methoden

SQL für Trolle. mag.e. Dienstag, Qt-Seminar

Ein reales Testumfeld bereitstellen - basierend auf einer Produktionsdatenbank (ohne eine neue Kopie zu erstellen)

Lua Grundlagen Einführung in die Lua Programmiersprache

10.6 Programmier-Exits für Workitems

C-Probeklausur (Informatik 1; Umfang: C, Teil 1; SS07)

Deklarationen in C. Prof. Dr. Margarita Esponda

7. Übung - Datenbanken

Modul Datenbanksysteme 2 Prüfung skizzenhaft SS Aug Name: Note:

Transkript:

Einführung in PLSQL Prozedurale Erweiterung der Sprache SQL um Elemente wie Variablen, Schleifen, Bedingungen, Ausnahmebehandlung Code läuft innerhalb der Datenbank ab und ist deshalb sehr performant Zusätzlich große Anzahl an vordefinierten Bibliotheken (packages) verfügbar. Einsatzfelder: anonyme Blöcke Funktionen und Prozeduren, Methoden Trigger Andreas Schmidt Einführung in PLSQL 122

Struktur eines PLSQL Programms DECLARE BEGIN EXCEPTION END; -- Deklarationen -- eigentlicher -- Programmteil -- Fehlerbehandlung Deklarations und Ausnahmebehandlung sind optional beliebige Schachtelung der Blöcke ineinander möglich Deklarationsteil erlaubt Definition von Variablen, Konstanten, Cursorn, Funktionen und Prozeduren Variablen in dem Block gültig in dem sie deklariert wurden Kommentare: -- ich bin ein Kommentar * ich bin ein mehrzeiliger Kommentar * Andreas Schmidt Einführung in PLSQL 222

Datentypen in PLSQL BINARY_INTEGER Wertebereich -2147483647-2147483646 NUMBER [(Länge, Nachkommastelle)] 38 Stellen Genauigkeit CHAR [(Länge)] maximale Länge von 32767 Bytes VARCHAR2 [(Länge)] BOOLEAN DATE ROWID CURSOR Beispiel DECLARE owner char(10) := ich ; tablename char(30); bytes number(10) := 128000; today date not Null; ok boolean; pi constant number := 3.14159; zaehler number(5) := 1; CURSOR spieler_cursor is select * from spieler order by name; Andreas Schmidt Einführung in PLSQL 322

Datentypen in PLSQL Namen von Tabellen und Spalten sind als vordefinierte Variable vorhanden Attribut %TYPE liefert Datentyp einer anderen Variablen oder einer Tabellenspalte Attribut %ROWTYPE liefert Datentyp einer Tabellenzeile (Zugriff auf einzelne Felder über. - Notation) Beispiele: DECLARE stadt_name Stadt.name%type; nevada Wueste%rowtype; groesse Wueste.flaeche%type; hauptstadt stadt_name%type; BEGIN... groesse := nevada.flaeche; Tabelle Wueste Spalte name in Tabelle Stadt Andreas Schmidt Einführung in PLSQL 422

Bildschirmausgabe PLSQL Programme erzeugen normalerweise keine Bildschirmausgabe spezielles Paket zur Bildschirmausgabe verfügbar (DBMS_OUTPUT) Bildschirmausgabe mit Prozedur: DBMS_OUTPUT.PUT_LINE(<zeichenkette>); Bildschirmausgabe kann an und ausgeschaltet werden (Default OFF) Anweisung (SQLPLUS Sitzung) 1 : SET SERVEROUTPUT ON OFF [SIZE <numbytes>] Beispiel: SQL> set serveroutput on size 10000000 BEGIN DBMS_OUTPUT.PUT_LINE( Hallo designierter PLSQL Crack!! ); END; 1. SQLDeveloper: Menue >> Ansicht >> DBMS-Ausgabe (auf Pluszeichen drücken und passende Datenbankverbindung angeben) Andreas Schmidt Einführung in PLSQL 522

Kontrollstrukturen Zuweisungen Zuweisungsoperator := a := b * 120 + c; INTO Operator mit SELECT (nur, wenn genau ein Datensatz zurückgeliefert wird) declare anzahl_millionen_staedte number; select count(*) into anzahl_millionen_staedte from mondial.city where population > 1000000; dbms_output.put_line('es gibt ' anzahl_millionen_staedte ' Millionenstädte in der Mondial Datenbank'); FETCH... INTO (Mit Cursor) FETCH cur_station INTO s_id, x, y; Andreas Schmidt Einführung in PLSQL 622

Kontrollstrukturen (bedingte Anweisungen) bedingte Verzweigung IF <bedingung> THEN <anweisungen> END IF; Alternative IF <bedingung> THEN <anweisungen> ELSE <anweisungen> END IF; mehrere Alternativen IF <bedingung 1> THEN <anweisungen> ELSIF <bedingung 2> THEN <anweisungen> ELSIF <bedingung 3> THEN <anweisungen> ELSE <anweisungen> END IF; Andreas Schmidt Einführung in PLSQL 722

Kontrollstrukturen (Schleifen) LOOP... END LOOP a := 0; LOOP a := a + 1; if a = 50 then exit; end if; END LOOP; FOR <zaehlbereich> LOOP... END LOOP FOR i IN 1..50 LOOP insert into buch (kapitel, text) values (i, text(i)); END LOOP; Rückwärts FOR i in REVERSE 1..20 loop dbms_output.put_line(i); END LOOP; WHILE <bed> LOOP... END LOOP a := 0; WHILE a <= 50 LOOP b := b + a; a := a + 1; END LOOP; Andreas Schmidt Einführung in PLSQL 822

Ausnahmebehandlung Behandlung von Fehlern und Ausnahmesituationen durch Exceptionhandler Tritt Aufnahme auf, so wird normaler Ablauf abgebrochen und eine Fehlerbehandlung durchgeführt. Fehlerbehandlung erfolgt in EXCEPTION- Block. Ausnahmen können vordefiniert oder benutzerdefiniert sein. Beispiel (vordefinierte Ausnahme) DECLARE eine_stadt mondial.city%rowtype; stadt_name varchar2(20) := 'Karlsruhe'; -- alternativ: 'Metropolis' 'Springfield' BEGIN SELECT * INTO eine_stadt FROM mondial.city WHERE name = stadt_name; dbms_output.put_line(eine_stadt.name ' hat ' eine_stadt.population ' Einwohner'); EXCEPTION when no_data_found then dbms_output.put_line('stadt ' stadt_name ' gibt es nicht'); when too_many_rows then dbms_output.put_line('stadt ' stadt_name ' gibt es es mehrfach'); END; Andreas Schmidt Einführung in PLSQL 922

vordefinierte Ausnahmen Fakultät IWI Exception Oracle Error SQLCODE ACCESS_INTO_NULL ORA-06530-6530 COLLECTION_IS_NULL ORA-06531-6531 CURSOR_ALREADY_OPEN ORA-06511-6511 DUP_VAL_ON_INDEX ORA-00001-1 INVALID_CURSOR ORA-01001-1001 INVALID_NUMBER ORA-01722-1722 LOGIN_DENIED ORA-01017-1017 NO_DATA_FOUND ORA-01403 +100 NOT_LOGGED_ON ORA-01012-1012 PROGRAM_ERROR ORA-06501-6501 ROWTYPE_MISMATCH ORA-06504-6504 STORAGE_ERROR ORA-06500-6500 SUBSCRIPT_BEYOND_COUNT ORA-06533-6533 SUBSCRIPT_OUTSIDE_LIMIT ORA-06532-6532 TIMEOUT_ON_RESOURCE ORA-00051-51 TOO_MANY_ROWS ORA-01422-1422 VALUE_ERROR ORA-06502-6502 ZERO_DIVIDE ORA-01476-1476 Erläuterungen: http:fara.cs.uni-potsdam.de~uhlmann19ch09.html Andreas Schmidt Einführung in PLSQL 1022

Ausnahmebehandlung - eigene Ausnahmen DECLARE exep_moloch exception; eine_stadt mondial.city%rowtype; stadt_name varchar2(20) := 'San Francisco'; -- alternativ: 'Mexico City' BEGIN SELECT * INTO eine_stadt FROM mondial.city WHERE name = stadt_name; if eine_stadt.population > 5000000 then raise exep_moloch; end if; dbms_output.put_line(eine_stadt.name ' hat ' eine_stadt.population ' Einwohner'); EXCEPTION when exep_moloch then dbms_output.put_line('stadt ' eine_stadt.name ' ist zu groß für mich'); when others then dbms_output.put_line('fehler: ' sqlerrm); END; Andreas Schmidt Einführung in PLSQL 1122

CURSOR SQL Anweisung liefert i.a. eine Menge von Tupeln zurück Cursor zur sequentiellen Abarbeitung der Ergebnismenge Deklaration: DECLARE... cursor c1 is select * from land; Zugriff auf den Inhalt mittels OPEN FETCH CLOSE Status des Cursors %ISOPEN %FOUND %NOTFOUND %ROWCOUNT Andreas Schmidt Einführung in PLSQL 1222

CURSOR Programmcode: declare cursor cur_french_city is select * from mondial.city c where c.country = 'F' and c.population is not null order by c.population desc; a_city mondial.city%rowtype; OPEN cur_french_city; FETCH cur_french_city INTO a_city; WHILE cur_french_city%found LOOP dbms_output.put_line('datensatz: ' cur_french_city%rowcount ' Stadt: ' a_city.name ' (' a_city.population ')'); FETCH cur_french_city INTO a_city; END LOOP; CLOSE cur_french_city; Ausgabe: Datensatz: 1 Stadt: Paris (2152423) Datensatz: 2 Stadt: Marseille (800550) Datensatz: 3 Stadt: Lyon (415487) Datensatz: 4 Stadt: Toulouse (358688) Datensatz: 5 Stadt: Nice (342439) Datensatz: 6 Stadt: Strasbourg (252338) Datensatz: 7 Stadt: Nantes (244995) Datensatz: 8 Stadt: Bordeaux (210336) Datensatz: 9 Stadt: Montpellier (207996) Datensatz: 10 Stadt: Saint Etienne (199396) Datensatz: 11 Stadt: Rennes (197536) Datensatz: 12 Stadt: Le Havre (195854) Datensatz: 13 Stadt: Reims (180620)... Andreas Schmidt Einführung in PLSQL 1322

CURSOR Kurzform (ohne OPEN, FETCH, CLOSE) declare cursor cur_french_city is select * from mondial.city c where c.country = 'F' and c.population is not null order by c.population desc; FOR a_city in cur_french_city LOOP dbms_output.put_line('datensatz: ' cur_french_city%rowcount ' Stadt: ' a_city.name ' (' a_city.population ')'); END LOOP; Andreas Schmidt Einführung in PLSQL 1422

CURSOR ohne explizite Cursorvariable: FOR a_city in (select * from mondial.city c where c.country = 'F' and c.population is not null order by c.population desc) LOOP dbms_output.put_line('datensatz: ' cur_french_city%rowcount ' Stadt: ' a_city.name ' (' a_city.population ')'); END LOOP; Andreas Schmidt Einführung in PLSQL 1522

CURSOR mit Parametern in where Klausel können Auswahlkriterien angegeben werden Werte können beim öffnen des Cursors mit übergeben werden z.b.: OPEN cur_city('d'); Ideal bei geschachtelten Tabellen Beispiel declare cursor cur_city(country_id char) is select * from mondial.city c where c.country = country_id and c.population is not null order by c.population desc; FOR a_city in cur_city('d') LOOP dbms_output.put_line('datensatz: ' cur_city%rowcount ' Stadt: ' a_city.name ' (' a_city.population ')'); END LOOP; END; Andreas Schmidt Einführung in PLSQL 1622

Funktionen, Prozeduren Definition von Prozeduren und Funktionen innerhalb eines PLSQL Blocks Integration von Prozeduren und Funktionen als Datenbankobjekte Übergabeparameter können als IN, OUT und IN OUT deklariert werden. Übergabeparameter können einen Standardwert besitzen Parametertypen ohne Größenangabe Beispiel Prozedurkopf. procedure spielzug(spieler_id in integer, ziel_station in integer, ticket in varchar default 'Taxi') is -- Implementierung; Prozedur-Funktionsrumpf entspricht einem PLSQL-Block ohne Schlüsselwort DECLARE Andreas Schmidt Einführung in PLSQL 1722

Funktionen, Prozeduren Funktionsdeklaration entspricht Prozedurdeklaration mit Unterschied, dass Ergebnistyp der Funktion angegeben wird. Rückgabe der berechneten Ergebnisse mittels Schlüsselwort RETURN. Beispiel: function minimum(a in number, b in number) return number is if a < b then return a; else return b; end if; Aufruf: dbms_output.put_line('min. von 12 und -7:' minimum(12,-7)); Andreas Schmidt Einführung in PLSQL 1822

Beispiel declare m number; function minimum(a in number, b in number) return number is if a < b then return a; else return b; end if; procedure maximum(a in number, b in number, res out number) is if a > b then res := a; else res := b; end if; dbms_output.put_line('minimum von 12 und -7: ' minimum(12,-7)); maximum(2,-4, m); dbms_output.put_line('maximum von 2 und -4: ' m); Andreas Schmidt Einführung in PLSQL 1922

ProzedurenFunktionen als Datenbankobjekte Abspeichern von FunktionenProzeduren als benannte Datenbankobjekte FunktionenProzeduren können von SQLPLUS TOAD..., PLSQL Code oder auch über OCI, ODBC, JDBC aus aufgerufen werden. Aufruf (Definition rechte Seite); SQL> dbms_output.put_line('fak(5)=' fak(5)); Beispiel einer Funktionsdeklaration: create or replace function fak(z in integer) return number is f number := 1; for i in 2..z loop f := f * i; end loop; return f; alternative kurzform (1-Zeiler): SQL> exec dbms_output.put_line('fak(5)=' fak(5)); Andreas Schmidt Einführung in PLSQL 2022

ProzedurenFunktionen als Datenbankobjekte Fehler bei Definition einer ProzedurFunktion können mit dem SQLPLUS Kommando show errors angezeigt werden Aufruf von PLSQL Funktionen auch innerhalb von SQL Statements Funktionen können mit Ausführungsrechten versehen werden (Kapselung) FunktionenProzeduren können als EXTERN deklariert sein (Implementierung in Java, C++,...) Tabelle user_source enthält alll benutzerdefinierten Datenbankobjekte SQL> desc user_source Name Typ ------------------------- NAME VARCHAR2(30) TYPE VARCHAR2(12) LINE NUMBER TEXT VARCHAR2(4000) select text from user_source where name='fak' and type='function' order by line; Andreas Schmidt Einführung in PLSQL 2122

Literaturweitere Informationsquellen Einführung in PLSQL: http:www.a-wilde.dehpstudiumdbplsql1.htm Oracle PLSQL Programmierung, 2. Auflage; Steven Feuerstein & Bill Pribyl; Deutsche Übersetzung von Dorothea Reder; O Reilly; 2. Auflage April 2003; ISBN 3-89721-184-X; Seiten 1084; 64.00 Oracle PLSQL - kurz & gut, 2. Auflage; Steven Feuerstein, Bill Pribyl & Chip Dawes; Deutsche Übersetzung von Wolfgang Gabriel & Lars Schulten; 2. Auflage September 2003; ISBN 3-89721-260-9; Seiten 134; 8.90 Overview of PLSQL (Oracle Seiten): http:otn.oracle.comtechpl_sqlindex.html Andreas Schmidt Einführung in PLSQL 2222