DB2 - Comment exécuter une requête ad hoc de sélection avec un paramètre dans IBM System i Access for Windows Tool GUI

StackOverflow https://stackoverflow.com/questions/2336820

Question

Je voudrais faire quelques déclarations ad hoc de sélection dans l'outil IBM System i Navigator pour DB2 à l'aide d'une variable que je déclare.

Par exemple, dans le monde SQL Server je le faire facilement dans la fenêtre de requête SQL Server Management Studio comme ceci:

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

select * from TableName where Column = @VariableName;

Comment puis-je faire quelque chose de semblable dans l'outil IBM System i Navigator?

Était-ce utile?

La solution

Je suis tombé sur ce poste tout en recherchant la même question. Mon collègue a fourni la réponse. Il est en effet possible de déclarer des variables dans une base ad hoc instruction SQL dans le navigateur. Voici comment cela se fait:

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

Si vous ne laissez pas tomber le nom de la variable, il se bloque autour jusqu'à qui sait quand ...

Autres conseils

À l'heure actuelle, nous travaillons sur la même question au travail. Unfortunaly, nous avons conclu que cela est impossible. Je suis d'accord, ce serait formidable, mais il ne fonctionne pas de cette façon. iNavigator ne prend pas en charge SET ou Définir. Vous pouvez le faire dans SQL embarqué, mais ce ne sont pas intégrées SQL. Même si vous créez un document séparé (xxx.sql), ensuite ouvrir ce document pour exécuter le script ce qui en fait un script interactif (qui est, DECLARE SECTION est pas autorisé).

Comme alternative, dans l'écran SQL / script vous pouvez utiliser CL: . Tout ce qui suit ce préfixe est exécuté comme commande CL. Vous pouvez manipuler vos tables (par exemple RNMF) de cette façon.

En tant que seconde alternative, l'iSeries prend en charge les scripts Rexx (par défaut installé avec l'os). Rexx est bon langage de script dynamique et il prend en charge Embedded SQL. Je l'ai fait beaucoup de fois et il fonctionne très bien. J'ai même créé des scripts pour notre environnement de production.

Il suffit de créer un script « par défaut » avec un exemple PREPARE et déclaration du curseur et copier à volonté. Avec ce script, vous pouvez jouer. Consultez le manuel Rexx pour la syntaxe correcte de exec-sql. En outre, vous n'avez STDIN et STDOUT mais vous pouvez utiliser « OVRDBF » pour pointer vers une table de base de données (fichier physique). Laissez-moi savoir si vous avez besoin d'un exemple de script Rexx.

Notez que le manuel "programmation embarquée SQL" ne exemples Rexx.

Voici quelques autres alternatives.

Outil de transfert de données - Vous pouvez exécuter l'outil de transfert de données iSeries à partir de la ligne de commande (RTOPCB). Tout d'abord, exécutez la version graphique et de créer un fichier de définition. Si vous modifiez ce fichier avec un éditeur de texte, vous verrez que cela est juste une ancienne fichier INI et vous pouvez facilement trouver la ligne avec la requête en elle. De là, vous pouvez écrire un fichier batch ou autre pré-traiter le fichier texte pour vous permettre de manipuler la requête avant de le soumettre à l'outil de requête.

QSHELL - Si vous pouvez vous connecter à l'iSeries de manière interactive, vous trouverez peut-être l'environnement QSHELL plus familier que CL ou REXX (bien que REXX est une sorte de plaisir). QSHELL est un environnement complet en cours d'exécution sur Posix l'iSeries. Utilisez la commande STRQSH pour commencer QSHELL. Vous pouvez avoir ksh ou csh comme une coquille. A l'intérieur QSHELL, il y a une commande appelée « db2 » qui soumet des requêtes. Donc, vous devriez être en mesure de faire quelque chose comme ça à l'intérieur QSHELL:

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

Vous pourriez avoir à jouer avec les citations pour obtenir ksh de les transmettre correctement.

En outre, à l'intérieur QSHELL, vous devriez avoir une installation Perl complète qui vous permettra d'utiliser DBI pour obtenir des données.

D'autres façons d'interagir avec les données sur l'iSeries: requête du client avec Python via ODBC; requête du client avec Jython via JDBC; installer Jython directement sur l'iSeries, puis interroger via JDBC.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top