5 Stimmen

DB2 - Ausführen einer Ad-hoc-Select-Abfrage mit einem Parameter in IBM System i Access for Windows GUI Tool

Ich möchte einige Ad-hoc-Select-Anweisungen im IBM System I Navigator-Tool für DB2 unter Verwendung einer von mir deklarierten Variablen ausführen.

In der Welt von SQL Server würde ich dies zum Beispiel im Abfragefenster von SQL Server Management Studio wie folgt tun:

DECLARE @VariableName varchar(50);
SET @VariableName = 'blah blah';

select * from TableName where Column = @VariableName;

Wie kann ich etwas Ähnliches mit dem IBM System I Navigator machen?

9voto

Brian Punkte 528

Ich bin bei der Suche nach der gleichen Frage auf diesen Beitrag gestoßen. Mein Kollege hat die Antwort gegeben. Es ist in der Tat möglich, Variablen in einer Ad-hoc-SQL-Anweisung im Navigator zu deklarieren. So wird es gemacht:

CREATE OR REPLACE VARIABLE variableName VARCHAR(50);
SET variableName = 'blah';
SELECT * FROM table WHERE column = variableName;
DROP VARIABLE variableName;

Wenn Sie den Variablennamen nicht löschen, bleibt er so lange bestehen, bis wer weiß wann...

1voto

robertnl Punkte 1014

Im Moment arbeiten wir auf der Arbeit an demselben Problem. Leider sind wir zu dem Schluss gekommen, dass dies nicht möglich ist. Ich stimme zu, es wäre großartig, aber so funktioniert es einfach nicht. iNavigator unterstützt weder SET noch Define. Sie können dies in eingebettetem SQL tun, aber dies ist kein eingebettetes SQL. Selbst wenn Sie ein separates Dokument (xxx.sql) erstellen, müssen Sie dieses Dokument öffnen, um das Skript auszuführen, was es zu einem interaktiven Skript macht (d. h. DECLARE SECTION ist nicht zulässig).

Alternativ können Sie im SQL-Bildschirm/Skript Folgendes verwenden CL: . Alles, was nach diesem Präfix kommt, wird als CL-Befehl ausgeführt. Auf diese Weise können Sie Ihre Tabellen (z.B. RNMF) manipulieren.

Als zweite Alternative unterstützt die iSeries auch Rexx-Skripte (standardmäßig mit dem Betriebssystem installiert). Rexx ist eine gute dynamische Skriptsprache und unterstützt eingebettetes SQL. Ich habe das schon oft gemacht und es funktioniert hervorragend. Ich habe sogar Skripte für unsere Produktionsumgebung erstellt.

Erstellen Sie einfach ein "Standard"-Skript mit einem Beispiel für die PREPARE- und CURSOR-Anweisung und kopieren Sie es nach Belieben. Mit diesem Skript können Sie dann herumspielen. Im Rexx-Handbuch finden Sie die korrekte Syntax von exec-sql. Außerdem haben Sie STDIN und STDOUT, aber Sie können 'OVRDBF' verwenden, um auf eine Datenbanktabelle (physische Datei) zu zeigen. Lassen Sie es mich einfach wissen, wenn Sie ein Rexx-Beispielskript benötigen.

Beachten Sie, dass das Handbuch "SQL embedded programming" auch Rexx-Beispiele enthält.

0voto

Tim Punkte 961

Hier sind ein paar andere Alternativen.

Data Transfer Tool - Sie können das iSeries Data Transfer Tool über die Befehlszeile (RTOPCB) ausführen. Starten Sie zunächst die GUI-Version und erstellen Sie eine Definitionsdatei. Wenn Sie diese Datei mit einem Texteditor bearbeiten, werden Sie sehen, dass es sich um eine altmodische INI-Datei handelt, und Sie können die Zeile mit der Abfrage leicht finden. Von dort aus können Sie eine Batch-Datei schreiben oder die Textdatei anderweitig vorverarbeiten, um die Abfrage zu manipulieren, bevor Sie sie an das Abfragetool übermitteln.

QSHELL - Wenn Sie sich interaktiv auf der iSeries anmelden können, dann ist Ihnen die QSHELL-Umgebung vielleicht vertrauter als CL oder REXX (obwohl REXX irgendwie Spaß macht). QSHELL ist eine vollständige POSIX-Umgebung, die auf der iSeries läuft. Verwenden Sie den Befehl STRQSH, um QSHELL zu starten. Sie können ksh oder csh als Shell verwenden. Innerhalb von QSHELL gibt es einen Befehl namens "db2", der Abfragen durchführt. Sie sollten also in der Lage sein, innerhalb von QSHELL etwas Ähnliches zu tun:

system> VariableName = 'blah blah'
system> db2 "select * from TableName where Column = \'$VariableName\'"

Möglicherweise müssen Sie mit den Anführungszeichen herumspielen, damit ksh sie korrekt weitergibt.

Außerdem sollten Sie innerhalb von QSHELL eine vollständige Perl-Installation haben, die es Ihnen ermöglicht, DBI zum Abrufen von Daten zu verwenden.

Einige andere Möglichkeiten zur Interaktion mit Daten auf der iSeries: Abfrage vom Client mit Python über ODBC; Abfrage vom Client mit Jython über JDBC; Installation von Jython direkt auf der iSeries und anschließende Abfrage über JDBC.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X