29.11.2012 Aufrufe

Branchenkompetenz plus Methodik ergibt Erfolg - Midrange Magazin

Branchenkompetenz plus Methodik ergibt Erfolg - Midrange Magazin

Branchenkompetenz plus Methodik ergibt Erfolg - Midrange Magazin

MEHR ANZEIGEN
WENIGER ANZEIGEN

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-

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!