Kapitel 4 Dynamisches SQL

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

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

Prozedurale Datenbank- Anwendungsprogrammierung

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

Kapitel 7 Datenbank-Tuning

Kapitel 6 Objektrelationale Datenbanken

Kapitel 3 Datenintegrität

Vorbereitungen zum 3. Praktikum (PL/SQL):

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

Prozedurale SQL-Erweiterungen

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

Datenbanken 1 und Objektorientierte Datenbanken

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

Datenbanken: Prozedurales SQL

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

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

Kapitel 7 Datenbank-Tuning. Folien zum Datenbankpraktikum Wintersemester 2010/11 LMU München

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

Oracle: Abstrakte Datentypen:

11 Anwendungsprogrammierung

SQL (Structured Query Language) Schemata Datentypen

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

Kapitel 8 Verteilte Datenbanken

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

Einführung in PL/SQL

Entwicklungsumgebung für die Laborübung

Objektrelationale, erweiterbare Datenbanken WS 04/05

Einführung in SQL. 1. Grundlagen SQL. Structured Query Language. Viele Dialekte. Unterteilung: i. DDL (Data Definition Language)

WHERE Klausel Generierung mit.net und Oracle. Aus unserer Projekterfahrung und Architektur-Kurs

Inhalt. Ein Einführung in die Nutzung von SQL-Datenbanken am Beispiel Oracle. Daten und Tabellen - ein Beispiel. Daten und Tabellen - Normalisierung

DATENBANKEN SQL UND SQLITE VON MELANIE SCHLIEBENER

NoSQL mit Postgres 15. Juni 2015

Oracle Datenbankprogrammierung mit PL/SQL Grundlagen

Übungsblatt 8- Lösungsvorschlag

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

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

Datenbanksysteme. Dominic Pacher. Datenbanken und Informationssysteme (DBIS) Institut für Informatik Universität Innsbruck. dbis-informatik.uibk.ac.

Folgendes PL/SQL Codefragment zeigt das grundlegende Statement für diesen Test: Java.

PL/pgSQL. VU Datenbanksysteme. Reinhard Pichler

Datenbanksysteme I Datenbankprogrammierung Felix Naumann

Übung Datenbanken in der Praxis. Datenmodifikation mit SQL

Datenbanken SQL. Insert, Update, Delete, Drop. Krebs

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

Datenbankprogrammierung 1

2. Datenbank-Programmierung

Einstellungen zur Verwendung von Flashback-Abfragen

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

Strukturierte Objekttypen

Parallele Programmierung in SQL und PL/SQL. Peter Bekiesch Dierk Lenz DOAG 2011 Konferenz und Ausstellung 17. November 2011

Kontrollstrukturen in PL/SQL

Aufgabenstellung. Bekannte Lösungsansätze. Die Idee. Native Informix Architektur

Dynamische Generierung von XML

ISU 1. Ue_08/02_Datenbanken/SQL. 08 Datenbanken. Übung. SQL Einführung. Eckbert Jankowski.

Datenbankadministration

Einbettung in SQL. Zwei Prinzipien: (1) Statische Einbettung

DB2 SQL, der Systemkatalog & Aktive Datenbanken

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

Geschäftslogik in die Datenbank Umstellung eines Kernbanksystems

Carsten Czarski Oracle Deutschland B.V. & Co KG. Keine Angst vor SQL Injection oder Wie man Datenbankzugriffe sicher implementiert

Extracting Business Rules from PL/SQL-Code

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

Fakultät für Informatik & Wirtschaftsinformatik DB & IS II - SS XMLType. Christian Senger/Andreas Schmidt XMLType 1/32

Dieser Foliensatz darf frei verwendet werden unter der Bedingung, dass diese Titelfolie nicht entfernt wird.

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

Multimedia im Netz Wintersemester 2013/14. Übung 03 (Nebenfach)

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

Dipl. Inf. Eric Winter. PostgreSQLals HugeData Storage Ein Erfahrungsbericht

IT-Symposium

ORM & OLAP. Object-oriented Enterprise Application Programming Model for In-Memory Databases. Sebastian Oergel

Zugriff auf die Datenbank. Ulf Leser Wissensmanagement in der Bioinformatik

Von der passiven zur aktiven Datenbank II. Trigger Views Prozerdurale SQL-Erweiterungen

5.8 Bibliotheken für PostgreSQL

Datenbanken SQL Einführung Datenbank in MySQL einrichten mit PhpMyAdmin

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

Art der Info: Technische Background Info Teil 3 (April 2002)

Programmierung von Datenbank Anwendungen

Universität Augsburg, Institut für Informatik WS 2006/2007 Dr. W.-T. Balke 27. Nov M. Endres, A. Huhn, T. Preisinger Lösungsblatt 5

Datenbank-Anwendungsprogrammierung

Objektrelationale und erweiterbare Datenbanksysteme

Trigger schreiben. Überblick über Trigger. Datenbank Trigger: Beispiel. Aufbau eines Triggers

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

Datenbanktechnologie mit praktischen Übungen in MySQL und PHP

vs. Fehler zur Übersetzungszeit

Grundzüge und Vorteile von XML-Datenbanken am Beispiel der Oracle XML DB

Einstieg in das SQL- und Datenbanktuning Loblied auf den Tabellen-Index!

Prozeduren und Trigger in Datenbanken

Einführung in SQL. Sprachumfang: Indizes. Datensätzen. Zugriffsrechten

Oracle und LDAP. Zugriff auf LDAP-Daten aus einer Oracle-DB. Martin Busik

1 Hartmann Anna Cäcilienstr Köln (0221) Behrens-Hoffmeister Heidi Lindenweg Köln (0221)

SQL structured query language

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

Kuriositäten in der Oracle-Datenbank

Datumsangaben, enthält mindestens Jahr, Monat, Tag

SQL. Fortgeschrittene Konzepte Auszug

Uni Duisburg-Essen Fachgebiet Informationssysteme Prof. Dr. N. Fuhr

Grundkonzepte von SQL

Kapitel 8 Verteilte Datenbanken. Folien zum Datenbankpraktikum Wintersemester 2010/11 LMU München

Datenintegrität. Folien zum Datenbankpraktikum Wintersemester 2009/10 LMU München

Neugestaltung der Datenbank des Chemnitzer Studentennetzes

Transkript:

Kapitel 4 Dynamisches SQL Flien zum Datenbankpraktikum Wintersemester 2012/13 LMU München 2008 Thmas Bernecker, Tbias Emrich 2010 Tbias Emrich, Erich Schubert unter Verwendung der Flien des Datenbankpraktikums aus dem Wintersemester 2007/08 vn Dr. Matthias Schubert

Statisches SQL Statisches SQL umfasst SQL-Anweisungen, die man zur Übersetzungszeit exakt kennt (d.h. die als Zeichenketten vrgegeben sind). Sie enthalten insbesndere keine Variablen für Tabellen- der Spaltennamen. Slche Anweisungen können schn zur Übersetzungszeit vrbereitet werden. Man kennt auch die Anzahl und Typen der Ergebnisspalten der SQL- Anweisung, die bei jedem Prgrammablauf in exakt gleicher Weise ausgeführt wird. Statisches SQL ist effizient, da die Anweisungen vr ihrer Ausführung einmal vrbereitet werden und dann (mehrere Male) ausgeführt werden können. Die Anwendung, die statisches SQL verwendet, ist allerdings nach der Übersetzung an eine spezielle Datenbank gebunden. LMU München Flien zum Datenbankpraktikum Wintersemester 2012/13 2

Dynamisches SQL Ntwendigkeit: Ausführung vn Anweisungen, die in PL/SQL nicht als statische Anweisungen ausführbar sind, wie z.b.: DDL-Anweisungen, Kntrllanweisungen (GRANT, etc.) Zur Laufzeit zusammengestellte dynamische Anweisungen Keine Einbettung in den Quellcde, sndern Generierung als Zeichenkette zur Laufzeit der Übergabe als Parameter einer Funktin der Przedur Anfragen mit einem der mehreren Ergebnissätzen möglich Ist eine SQL-Anweisung zur Übersetzungszeit der Anwendung nicht vllständig bekannt (mit Ausnahme vn Parametern), dann muss dynamisches SQL verwendet werden. Oracle bietet zwei Möglichkeiten, dynamische SQL-Anweisungen in einem PL/SQL Blck zu implementieren: DBMS_SQL Package Natives dynamisches SQL LMU München Flien zum Datenbankpraktikum Wintersemester 2012/13 3

Übersicht 4.1 DBMS_SQL Package 4.2 Natives dynamisches SQL 4.3 Gegenüberstellung LMU München Flien zum Datenbankpraktikum Wintersemester 2012/13 4

DBMS_SQL Package Beispiel: dynamisches Einfügen in eine Tabelle (Variablenübergabe durch Call by Value) CREATE OR REPLACE PROCEDURE einfuegen ( tab_name VARCHAR2, telnr INTEGER, name VARCHAR2) IS cursr_hdl INTEGER; sql_anweisung VARCHAR2(100); rws_prcessed INTEGER; sql_anweisung := 'INSERT INTO ' tab_name ' VALUES (:var1, :var2)'; cursr_hdl := DBMS_SQL.pen_cursr; DBMS_SQL.parse(cursr_hdl, sql_anweisung, DBMS_SQL.native); DBMS_SQL.bind_variable(cursr_hdl, ':var1', telnr); DBMS_SQL.bind_variable(cursr_hdl, ':var2', name); rws_prcessed := DBMS_SQL.execute(cursr_hdl); DBMS_SQL.clse_cursr(cursr_hdl); LMU München Flien zum Datenbankpraktikum Wintersemester 2012/13 5

Übersicht 4.1 DBMS_SQL Package 4.2 Natives dynamisches SQL 4.3 Gegenüberstellung LMU München Flien zum Datenbankpraktikum Wintersemester 2012/13 6

Natives Dynamisches SQL Anfragen mit einem Ergebnissatz: EXECUTE IMMEDIATE <Anweisung> [INTO <ErgebnisVariable>,..., <ErgebnisVariable>] [USING <ParameterVariable>,..., <ParameterVariable>]; Beispiel: DECLARE Name VARCHAR2(20); Nr INTEGER := 12345; sql_anweisung VARCHAR2(100); sql_anweisung := 'SELECT Name FROM Mitarbeiter WHERE TelNr = :1'; EXECUTE IMMEDIATE sql_anweisung INTO Name USING Nr; sql_anweisung := 'INSERT INTO Mitarbeiter VALUES (:1, :2)'; EXECUTE IMMEDIATE sql_anweisung USING Nr, Name; Achtung: Jede Variable muss einzeln gebunden werden. LMU München Flien zum Datenbankpraktikum Wintersemester 2012/13 7

Natives Dynamisches SQL Anfragen mit mehreren Ergebnissätzen: OPEN <Cursrvariable> FOR <SELECT-Anweisung> [USING <ParameterVariable>,..., <ParameterVariable>]; LOOP FETCH <Cursrvariable> INTO <ErgebnisVariable>,..., <ErgebnisVariable>; EXIT WHEN <Cursrvariable>%NOTFOUND; END LOOP; CLOSE <Cursrvariable>; Die SELECT-Anweisung wird zur Laufzeit zusammengestellt. Eventuelle Parameter werden mit USING gebunden. Die Bearbeitung erflgt wie bei einem nrmalen Cursr in einer LOOP- Schleife, die über FETCH und INTO die einzelnen Ergebnissätze in Variablen ablegt. LMU München Flien zum Datenbankpraktikum Wintersemester 2012/13 8

Natives Dynamisches SQL Exkurs: Cursrdeklaratin zur Verwendung mit dynamischem SQL TYPE <Typname> IS REF CURSOR; -- Nutzung des Typs REF CURSOR <Cursrvariable> <Typname>; Beispiel: DECLARE Nr Mitarbeiter.TelNr%TYPE; Name Mitarbeiter.Name%TYPE := 'Schmidt'; sql_anweisung VARCHAR2(100); TYPE refcur IS REF CURSOR; c1 refcur; sql_anweisung := 'SELECT TelNr FROM Mitarbeiter WHERE Name = :x'; OPEN c1 FOR sql_anweisung USING Name; LOOP FETCH c1 INTO Nr; EXIT WHEN c1%notfound; DBMS_OUTPUT.PUT_LINE(Nr); END LOOP; CLOSE c1; LMU München Flien zum Datenbankpraktikum Wintersemester 2012/13 9

Natives Dynamisches SQL Beispiel: DDL mit dynamischem SQL CREATE OR REPLACE PROCEDURE tab_erstellen (tab_name VARCHAR2) IS -- Erstellen einer Tabelle. Name der Tabelle im Parameter tab_name EXECUTE IMMEDIATE 'CREATE TABLE ' tab_name ' ( t_id NUMBER(4) NOT NULL, name VARCHAR2(15), beruf VARCHAR2(10), einkmmen NUMBER(6,2), telnr NUMBER(10) )'; / CREATE OR REPLACE PROCEDURE tab_leschen (tab_name VARCHAR2) IS EXECUTE IMMEDIATE 'DROP TABLE ' tab_name; LMU München Flien zum Datenbankpraktikum Wintersemester 2012/13 10

Übersicht 4.1 DBMS_SQL Package 4.2 Natives dynamisches SQL 4.3 Gegenüberstellung LMU München Flien zum Datenbankpraktikum Wintersemester 2012/13 11

Vergleich: DBMS_SQL Package CREATE OR REPLACE PROCEDURE einfuegen ( tab_name VARCHAR2, telnr INTEGER, name VARCHAR2) IS cursr_hdl INTEGER; sql_anweisung VARCHAR2(100); rws_prcessed INTEGER; sql_anweisung := 'INSERT INTO ' tab_name ' VALUES (:var1, :var2)'; cursr_hdl := DBMS_SQL.pen_cursr; DBMS_SQL.parse(cursr_hdl, sql_anweisung, DBMS_SQL.native); DBMS_SQL.bind_variable(cursr_hdl, ':var1', telnr); DBMS_SQL.bind_variable(cursr_hdl, ':var2', name); rws_prcessed := DBMS_SQL.execute(cursr_hdl); DBMS_SQL.clse_cursr(cursr_hdl); Natives dynamisches SQL CREATE OR REPLACE PROCEDURE einfuegen ( tab_name VARCHAR2, telnr INTEGER, name VARCHAR2) IS sql_anweisung VARCHAR2(100); sql_anweisung := 'INSERT INTO ' tab_name ' VALUES (:var1,:var2)'; EXECUTE IMMEDIATE sql_anweisung USING telnr, name; LMU München Flien zum Datenbankpraktikum Wintersemester 2012/13 12

Beispiel: Dynamische Ausführung eines PL/SQL-Blcks Gegeben: CREATE OR REPLACE PROCEDURE event_handler_1 (param number) IS... / CREATE OR REPLACE PROCEDURE event_handler_2 (param number) IS... / CREATE OR REPLACE PROCEDURE event_handler_3 (param number) IS... Statisches SQL CREATE OR REPLACE PROCEDURE dispatcher (event number, param number) IS IF (event = 1) THEN event_handler_1(param); ELSIF (event = 2) THEN event_handler_2(param); ELSIF (event = 3) THEN event_handler_3(param); END IF; Dynamisches SQL CREATE OR REPLACE PROCEDURE dispatcher (event number, param number) IS EXECUTE IMMEDIATE ' event_handler_' t_char(event) '(:1); ' USING param; LMU München Flien zum Datenbankpraktikum Wintersemester 2012/13 13