Der Einsatz von SELECT from INSERT auf dem System i

Ähnliche Dokumente
Grundlagen von Datenbanken SS 2010 Kapitel 8: Datenbank-Einbettung in Programmiersprachen Prof. Dr. Stefan Böttcher Universität Paderborn

Kapitel 10. JDBC und SQLJ. Prof. Dr. Wolfgang Weber Vorlesung Datenbanken 1

Willkommen. Datenbanken und Anbindung

JDBC. Es kann z.b. eine ODBC-Treiberverbindung eingerichtet werden, damit das JAVA-Programm auf eine ACCESS-DB zugreifen kann.

Webbasierte Informationssysteme

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

seit Java 1.1 Bestandteil der API: packages java.sql, javax.sql

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

vs. Fehler zur Übersetzungszeit

Exercises for the course Databases and Information Systems I WS 2006/2007 Special exercise JDBC

Klausur Datenbanken II

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

Datenbanken & Informationssysteme Übungen Teil 1

Übersicht der wichtigsten MySQL-Befehle

Java Database Connectivity (JDBC) Walther Rathenau Gewerbeschule 1

ids-system GmbH Tipp #3 Leer-Strings in SQL oder die Frage nach CHAR oder VARCHAR

ACCESS SQL ACCESS SQL

Wie kommen die Befehle zum DBMS

Oracle & Java HOW TO

6. Übung - Datenbankprogrammierung

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

Java Application 1 Java Application 2. JDBC DriverManager. JDBC-ODBC Br idge. ODBC Driver Manager. Dr iver C. Dr iver D.

Anwendungsentwicklung Datenbanken SQL. Stefan Goebel

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

PHP und MySQL. Integration von MySQL in PHP. Zellescher Weg 12 Willers-Bau A109 Tel Michael Kluge (michael.kluge@tu-dresden.

Webbasierte Informationssysteme

PHP MySQL - myphpadmin Formulardaten in eine Datenbank speichern

SQL Data Manipulation Language (DML) und Query Language (QL)

Datenbanksysteme. Programmieren von Datenbankzugriffen mit JDBC. Burkhardt Renz. Fachbereich MNI Technische Hochschule Mittelhessen

Modifikation der Datenbank

Datenbankzugriff mit JDBC

Programmieren II. Beispiele für RDBMS. Relationale Datenbanken. Datenbanken SQL. Dr. Klaus Höppner JDBC. Hochschule Darmstadt SS 2008

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

11 Anwendungsprogrammierung

Oracle 10g Einführung

Datenbank und Tabelle mit SQL erstellen

MySQL Queries on "Nmap Results"

Seminar 2. SQL - DML(Data Manipulation Language) und. DDL(Data Definition Language) Befehle.

5.8 Bibliotheken für PostgreSQL

SQL. Datenmanipulation. Datenmanipulationssprache. Ein neues Tupel hinzufügen. Das INSERT Statement

Abfragen (Queries, Subqueries)

Zeilen in SAS-Datensatz einfügen

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

Datenbanksysteme. Programmieren von Datenbankzugriffen mit JDBC. Burkhardt Renz. Fachbereich MNI Technische Hochschule Mittelhessen

MySQL, Java und einiges mehr

Objektrelationale, erweiterbare Datenbanken WS 04/05

Java Database Connectivity-API (JDBC)

Folien php/mysql Kurs der Informatikdienste

Dokumentation zur Anlage eines JDBC Senders

QMF Tabelle Q.OBJECT_DATA in DB2

Enterprise Computing Einführung in das Betriebssystem z/os. Prof. Dr. Martin Bogdan Prof. Dr.-Ing. Wilhelm G. Spruth WS2012/2013

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

Datenschutz: Zugriffsrechte in SQL

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

PostgreSQL Ein Überblick

Java Database Connectivity-API (JDBC)

GML und Bibliothek oracle.sdoapi

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

Einführung in die Informatik II

Oracle: Abstrakte Datentypen:

10. Programmieren in SQL

Wiederholung VU Datenmodellierung

Datenbank Anbindung. Arthur Zaczek. Nov 2014

Universität Augsburg, Institut für Informatik WS 2009/2010 Prof. Dr. W. Kießling 18. Dez Dr. A. Huhn, F. Wenzel, M. Endres Lösungsblatt 8

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

Tabellen verknüpfen: Joins

Java Database Connectivity. Gracin Denis, IB 4 C

Garten - Daten Bank. - survival pack -

Aktuelle Sicherheitsprobleme im Internet: Angriffe auf Web-Applikationen

Datenmanipulation in SQL (1): Subselect:

Beispiel: DB-Mock (1/7)

Das diesem Dokument zugrundeliegende Vorhaben wurde mit Mitteln des Bundesministeriums für Bildung und Forschung unter dem Förderkennzeichen

Unterabfragen (Subqueries)

Datenbanksysteme 2011

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

IBM i Client Partition mit VPM Start. Kunst von Burgy Zapp

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

3 Query Language (QL) Einfachste Abfrage Ordnen Gruppieren... 7

Ziel: wie kann man in Java auf Datenbanken zugreifen und Daten manipulieren? dazu brauchen wir:

Datenbanksysteme I Datenbankprogrammierung Felix Naumann

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

Prüfungsnummer: deutsch. Prüfungsname: Querying. Version: Demo. SQL Server

Daten Bank. 4. Vorlesung. Dr. Karsten Tolle PRG2 SS 2012

Entwicklungsumgebung für die Laborübung

Die Datenbank und der Strukturentwurf wurden vorher mit phpmyadmin erzeugt.

MySQL, phpmyadmin & SQL. Kurzübersicht

Datenbanken 1 für Mediennformatiker WS ODBC, JDBC und SQLJ: Datenbank-Anbindung an Anwendungsprogramme

Aufgabe 12.1: JDBC - Datenbankzugriff in Java

In diesem Abschnitt wollen wir uns mit einem besonderen Thema widmen. Dem Thema SQL-JOIN.

Kapitel 11: Anwendungsentwicklung

C# - Einführung in die Programmiersprache Arbeiten mit ADO.NET. Leibniz Universität IT Services Anja Aue

Datenbanksysteme I Übung: JDBC. Jana Bauckmann

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

PostgreSQL im praktischen Einsatz. Stefan Schumacher

Java und Datenbanken Ein Überblick

Datenbanken Einführung Seite 1 von 7

Erzeugung und Veränderung von Tabellen

Multimedia im Netz Wintersemester 2013/14. Übung 02 (Hauptfach)

Transkript:

Zwei Operationen werden zu einer neuen Funktion von Jinmei Shen und Karl Hanson INSERT und SELECT waren vor V6R1 in DB2 für i5/os zwei getrennte Operationen. Um eingefügte Spaltenwerte abzufragen, konnte eine nachfolgende SELECT Operation benutzt werden, um auf das Ziel einer INSERT Operation zuzugreifen. Nach Erläuterung der neuen Funktion, praktischen Informationen und syntaktischen Beispielen im ersten Teil des Artikels (erschienen in NEWSolutions, Ausgabe Januar/Februar 2009) befassen sich die Autoren im heutigen zweiten Teil mit dem Einsatz von SELECT from INSERT auf dem System i. Der Einsatz von SELECT from INSERT auf dem System i Die folgenden Szenarien beschreiben einige Einsatzmöglichkeiten von SELECT from INSERT in DB2 für i5/os und geben einen kurzen Einblick in die beteiligten Prozesse. Abfrage eines generierten Spaltenwertes für eine einzelne hinzugefügte Spalte Die Zieltabelle des INSERT ist vorhanden und enthält eine Spalte mit generierten Werten. Der Requester, der das INSERT ausführt, verfügt über die Berechtigung, der Zieltabelle Zeilen 1. Ein Anwendungsprogramm wird aufgerufen, das ein SQL SELECT INTO Statement mit einem INSERT Statement in der FROM Klausel enthält. Das INSERT benutzt die VALUES Klausel, um eine einzelne neue Zeile in die Tabelle einzufügen (Abbildung 10). 2. Das Anwendungsprogramm führt das SELECT INTO Statement aus und übergibt einen Wert für die Eingabespalte (custnum host variable) an den Datenbankmanager. 3. DB2 verarbeitet den INSERT Request (eingebunden in das SELECT INTO) und fügt eine neue Zeile in die Tabelle orders ein. Hierbei wird ein Wert für die Spalte Auftragsnummer generiert. 4. DB2 verarbeitet den SELCT INTO Request und gibt den für die Spalte Auftragsnummer generierten Wert zurück an das Anwendungsprogramm. Über den Autor Jinmei Shen (jinmeis(ät)us.ibm.com) ist als IBM Softwareentwicklerin in Rochester, Minnesota tätig und beschäftigt sich ca. 10 Jahren mit IBM DB2 für System i. Karl Hanson (kchanson(ät)us.ibm.com) ist als Softwareentwickler im IBM Entwicklungslabor in Rochester, Minnesota tätig und hat sich in der Vergangenheit mit den Betriebssystemen des System/38 und der AS/400 Produktlinie beschäftigt. Seit ca. 10 Jahren ist er Mitglied des IBM DB2 für System i Entwicklungsteams. Übersetzt und für den deutschsprachigen Markt überarbeitet von Joachim Riener. EXEC SQL SELECT inorder.ordernum INTO :ordnum

FROM FINAL TABLE (INSERT INTO orders (custno) VALUES(:custnum) ) inorder ; Abbildung 10: SQL Beispiel-Statement Abfrage einer gesonderten, mit den eingefügten Zeilen in Verbindung stehenden Spalte mit Hilfe eine Subquery Es existieren zwei Tabellen: Das Ziel des INSERT und die Quelle der abgefragten Daten, die eingefügt werden sollen. Der Requester, der das INSERT ausführt, verfügt über die Berechtigung, Daten aus der abzufragenden Tabelle zu lesen. 1. Der Requester stellt eine Verbindung zu der DB2 für i5/os Datenbank her. 2. Der Requester führt ein SQL Script aus, das ein SELECT Statement mit einem INSERT Statement in der FROM Klausel enthält. Das INSERT verwendet eine Query, um die einzufügenden Zeilen zu ermitteln und spezifiziert eine INCLUDE-Spalte, die dem Result-Set (jedoch nicht der Zieltabelle) hinzugefügt werden soll (Abbildung 11). 3. DB2 verarbeitet den (im SELECT enthaltenen) INSERT Request. Zeilen aus der Query der sales_summary Tabelle werden in die bonus_candidates Tabelle eingefügt. Die gleichen Zeilen werden ebenfalls zusammen mit den Werten der ytd_sales Spalte aus der sales_summary Tabelle in eine temporäre Ergebnistabelle eingefügt. 4. Der Script Prozessor übernimmt die Zeilen aus der temporären Ergebnistabelle (Result-Set für das Outer SELECT). Jede zurückgegebene Zeile enthält alle in die bonus_candidates Tabelle eingefügten Spaltenwerte sowie die entsprechenden Werte der ytd_sales Spalten.

SELECT * FROM FINAL TABLE ( INSERT INTO bonus_candidates (empname, empserial, empsalary) INCLUDE inc_ytd_sales SELECT name, serial, salary, ytd_sales FROM sales_summary WHERE ytd_sales > 700000.00 ) Abbildung 11: SQL Beispiel-Statement mit einem INSERT in der FROM Klausel Query-Abfrage eines einzelnen Wertes, der sich aus einer variablen Anzahl der in eine Tabelle eingefügten Zeilen ergibt. Es existieren zwei Tabellen: Das Ziel des INSERT und die Quelle der abgefragten Daten, die eingefügt werden sollen. Der Requester, der das INSERT ausführt, verfügt über die Berechtigung, Daten aus der abzufragenden Tabelle zu lesen. 1. Der Requester ruft eine Anwendung auf, die die CLI SQL Schnittstelle bedient und übergibt einen einzelnen Parameterwert, der die in die Tabelle einzufügenden Zeilen spezifiziert. 2. Das CLI Programm stellt eine SQL Verbindung zu der DB2 für i5/os Datenbank her. 3. Das CLI Programm bereitet ein SQL Statement vor, um einerseits eine variable Anzahl von Zeilen in eine Tabelle einzufügen und andererseits einen einzelnen Wert aus dem Result Set der eingefügten Zeilen zurückzugeben. (Abbildung 12). 4. Das CLI Programm bindet Programmvariablen sowohl für den input parameter marker (WHERE Klausel) als auch für den output parameter marker des zuvor vorbereiteten Statements z. B. mit der API SQLSetParam(). Als Programmvariable für den input parameter marker wird der mit dem CLI Programmaufruf übergebene Input Parameterwert übernommen. 5. Das CLI Programm führt das vorbereitete Statement aus. 6. DB2 verarbeitet den (im SELECT enthaltenen) INSERT Request. Zeilen aus der Tabelle sales_summary werden in die Tabelle bonus_candidates eingefügt. Die gleichen Zeilen werden in eine temporäre Ergebnistabelle eingefügt. Die Zeilen der temporären Ergebnistabelle dienen als Eingabe für die Funktion AVG() in der Outer Query. Das Ergebnis dieses AVG() wird in die Programmvariable für den output parameter marker eingestellt. VALUES ( SELECT AVG(C2) FROM FINAL TABLE (INSERT INTO VALI1 SELECT * FROM VALI2) WHERE C1 >? ) ) INTO? Abbildung 12: SQL Beispiel-Statement mit einem INSERT in der FROM Klausel Einfügen einer Zeile in eine Tabelle und Abfrage aller generierten Spaltenwerte der eingefügten Zeile unter Einsatz von JDBC Die Zieltabelle des INSERT existiert und verfügt über zumindest eine Spalte, die generierte

Werte enthält. 1. Der Requester stellt eine SQL Verbindung zu der i5/os Datenbank her. 2. Der Requester führt ein JAVA Programm aus, das die Option RETURN_GENERATED_KEYS aus der executeupdate() Methode und die getgeneratedkeys() Statement Methode verwendet (Abbildung 13). 3. Das JAVA Programm führt die executeupdate Methode aus und veranlasst dadurch den JDBC Treiber, das INSERT Statement in ein SELECT Statement einzubinden. 4. DB2 verarbeitet den (in das SELECT eingebundenen) INSERT Request. Eine neue Zeile wird in die Tabelle authors eingefügt und die Werte für Spalten wie beispielsweise die IDENTITY Spalte oder Spalten mit Unterlassungswerten, deren Werte nicht mit dem INSERT übergeben wurden, werden generiert. Die gleichen Zeilendaten (einschließlich der generierten Spaltenwerte) werden zusammen mit dem cursor für das vom JDBC Treiber gelieferte SELECT in eine temporäre Ergebnistabelle eingefügt. Das JAVA Programm führt die getgeneratedkeys() Methode aus, die den cursor für das SELECT öffnet und den Zugriff auf das Result Set des cursors erlaubt. Weitere Result Set Methoden laufen ab, um die generierten Spaltenwerte abzufragen. String sql = "INSERT INTO authors (last, first, home) VALUES " + "'Shara', 'Ron', 'Minnesota, USA'"; int rows = stmt.executeupdate(sql, Statement.RETURN_GENERATED_KEYS); ResultSet rs = stmt.getgeneratedkeys(); if (rs.next()) { ResultSetMetaData rsmd = rs.getmetadata(); int colcount = rsmd.getcolumncount(); do { for (int i = 1; i <= colcount; i++) { String key = rs.getstring(i); System.out.println("key " + i + " is " + key); while (rs.next()); else {

System.out.println("There are no generated keys."); Abbildung 13: SQL Beispiel-Statement mit einem INSERT in der FROM Klausel Anmerkung: Sie müssen sich als Abonnent anmelden um diesen Teil des Inhalts zu sehen. Bitte Login für Zugriff. Noch nicht Abonnent? Sonderaktion nutzen. 7 Euro/Monat NEWSabo digital - sofort zugreifen & online bezahlen. 13,5 Euro/Monat NEWSabo plus inkl. 5x Logins & Print-Ausgaben - sofort zugreifen & per Firmen- Rechnung bezahlen.