Branchenkompetenz plus Methodik ergibt Erfolg - Midrange Magazin
Branchenkompetenz plus Methodik ergibt Erfolg - Midrange Magazin
Branchenkompetenz plus Methodik ergibt Erfolg - Midrange Magazin
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
40<br />
TEcHNIK & INTEGRATION<br />
Release 7.1 – Verarbeiten von Result Sets mit embedded SQL<br />
Die Einfachheit siegt<br />
In client/Server-Anwendungen werden Stored Procedures häufig verwendet, um die<br />
Kommunikation zwischen client und Server auf ein Minimum zu reduzieren. Anstatt Befehle<br />
einzeln auszuführen, werden sie in einem Programm (Stored Procedure) zusammengefasst,<br />
das mit dem SQL-Befehl cALL aufgerufen und ausgeführt wird.<br />
Output-Informationen aus Stored<br />
Procedures können in Tabellenform<br />
als Result Sets ausgegeben werden.<br />
Vor Release 7.1 konnten solche<br />
Result Sets mit RPG, COBOL oder SQL<br />
zwar ausgegeben werden, jedoch war<br />
eine Verarbeitung nur mit einigen<br />
Klimmzügen möglich. Mit Release 7.1<br />
wurde diese Beschränkung aufgehoben.<br />
Wie Result Sets mit (embedded)<br />
SQL verarbeitet werden können, wird<br />
in diesem Artikel gezeigt.<br />
Bevor wir uns der Verarbeitung von<br />
Result Sets zuwenden, zunächst ein<br />
paar kurze Begriffsdefinitionen.<br />
Stored Procedures<br />
Bei Stored Procedures handelt es sich<br />
um Programme oder auch Prozeduren<br />
(ohne Rückgabewert), die in Service-<br />
Programmen hinterlegt sind. Stored<br />
Procedures werden mit dem SQL-Befehl<br />
CREATE PROCEDURE erstellt oder<br />
registriert und sind entweder in einer<br />
HLL (High Level Language), wie RPG<br />
oder Cobol, oder in JAVA oder direkt in<br />
der SQL-Programmiersprache geschrieben.<br />
Stored Procedures können aus jeder<br />
Umgebung, in der SQL ausgeführt<br />
werden kann, über den SQL-Befehl<br />
CALL aufgerufen werden. So können<br />
u. a. RPG oder Cobol-Programme oder<br />
-Prozeduren als Stored Procedures registriert<br />
und mit einem einfachen SQL<br />
CALL aus Java- oder .Net-Anwendungen<br />
aufgerufen werden.<br />
Für Stored Procedures können sowohl<br />
Ein- als auch Ausgabe-Parameter<br />
MIDRANGE MAgAZIN · 10/2012<br />
definiert werden. Zusätzlich können<br />
Informationen in Tabellenform als (dynamische)<br />
Result Set(s) ausgegeben<br />
werden.<br />
Stored Procedures können außerdem<br />
überladen werden (procedure<br />
overloading), d. h., der gleiche Stored<br />
Procedure-Name kann im gleichen<br />
Schema/Bibliothek mehrfach und mit<br />
einer unterschiedlichen Anzahl an Parametern<br />
vorhanden sein. Die Anzahl<br />
der ausgegebenen Result Sets wird für<br />
die Überlagerung nicht in Betracht gezogen.<br />
Abhängig von der Anzahl der<br />
übergebenen Parameter wird die entsprechende<br />
Stored Procedure aufgerufen.<br />
Neben der Anzahl der Parameter<br />
wird als Identifizierungsmerkmal ein<br />
eindeutiger Name (specific name) verwendet,<br />
der entweder beim Erstellen<br />
manuell angegeben oder vom System<br />
ermittelt wird. Der Aufruf einer Stored<br />
Procedure kann auch über den spezifischen<br />
Namen erfolgen.<br />
Result Sets<br />
Result Sets sind Ausgabedaten aus<br />
Stored Procedures in Tabellenform. Bei<br />
jedem Aufruf wird die gleiche Anzahl<br />
an Spalten mit der gleichen Definition<br />
ausgegeben, die Anzahl der zurückgegebenen<br />
Datensätze kann jedoch von<br />
Aufruf zu Aufruf variieren. Aus einer<br />
Stored Procedure können mehrere unterschiedlich<br />
definierte Result Sets ausgegeben<br />
werden.<br />
In Stored Procedures oder HLL-Programmen<br />
werden Result Sets entweder<br />
mit dem SQL-Befehl SET RESULT SET<br />
ausgegeben oder dadurch, dass ein SQL-<br />
Cursor geöffnet und vor Programm-/<br />
Prozedur-Ende nicht geschlossen wird.<br />
Die erste Variante wird in der Regel<br />
verwendet, wenn die auszugebenden<br />
Informationen zunächst lokal im (HLL-)<br />
Programm/Prozedur z. B. in Mehrfach-<br />
oder Array-Datenstrukturen oder Feldgruppen<br />
gesammelt werden. Die zweite<br />
Variante kann eingesetzt werden, wenn<br />
über einen Cursor ein Zugriff auf die<br />
Datenbank erfolgt und diese Daten von<br />
der rufenden Prozedur verarbeitet werden<br />
sollen.<br />
Die Sortierung des Result Sets hängt<br />
von der Angabe der ORDER BY-Anweisung<br />
im DECLARE CURSOR-Statement<br />
innerhalb der Stored Procedure ab.<br />
Fehlt diese Angabe, wird die Sortierung<br />
von den vom Query-Optimizer verwendeten<br />
Zugriffswegen/Indices bestimmt.<br />
Ebenso wie die Sortierung wird auch<br />
im DECLARE CURSOR-Statement durch<br />
Angabe von (DYNAMIC) SCROLL CUR-<br />
SOR festgelegt, ob innerhalb des Result<br />
Sets vorwärts und rückwärts gelesen<br />
werden kann. Durch die Angabe von<br />
WITH HOLD im DECLARE CURSOR-<br />
Statement kann definiert werden, dass<br />
der Cursor, mit dem das Result Set verarbeitet<br />
wird, bei COMMIT und ROLL-<br />
BACK geöffnet bleibt.<br />
Verarbeitung von Result Sets vor<br />
Release 7.1<br />
Vor Release 7.1 konnten Result Sets von<br />
Java oder .Net-Sprachen einfach verar-