Comment puis-je appeler une base de données DB2 procédure stockée avec des paramètres de SQuirreL SQL?
J'aime vraiment SQuirreL SQL comme un outil de requête SQL, mais je n'ai jamais été en mesure de l'obtenir à appeler des procédures stockées dans notre système as/400 de base de données DB2. Je reçois toujours le message d'erreur "Le nombre de valeurs de paramètre à définir ou enregistré ne correspond pas au nombre de paramètres." J'ai vérifié le nombre de paramètres et pas eu de chance. C'est la syntaxe que j'ai essayé pour une procédure qui prend un IN et un OUT:
appel SOMESPROC(12345, ?);
OriginalL'auteur KC Baltz | 2011-02-16
Vous devez vous connecter pour publier un commentaire.
Il semble que l'Écureuil n'est actuellement pas capable de faire cela sur as/400 DB2.
À l'aide de l'open source "SQL Workbench/J" ( http://www.sql-workbench.net/ ), j'ai pu appeler une procédure:
Il a sa propre commande pour appeler une procédure "wbcall". Utilisez ? pour les paramètres de sortie.
Remarque: lors de l'installation de SQL Workbench/J assurez-vous de télécharger le bon pilote DB2 à partir de IBM et également ajouter le fichier de licence lors de l'ajout du conducteur à l'intérieur de SQL Workbench/J.
Baltz: Pourquoi n'est-ce pas la bonne réponse pour la question d'origine? La réponse est en fait: Vous ne pouvez pas. Après que je viens de montrer une solution alternative en prime 🙂
OriginalL'auteur farbgeist
En Écureuil, vous pouvez utiliser quelque chose comme cela. Vous aurez envie de vous assurer que le type de la variable déclarée correspond au type de votre paramètre de sortie dans la procédure stockée.
Si vous devez également fournir les données pour la procédure, vous pouvez le faire.
Vous devez également modifier la déclaration de séparateur de quelque chose d'autre que
;
. Sinon, il va briser la déclaration et essayez d'envoyer chaque pièce individuellement.Ne fonctionne pas pour moi! Squirrel SQL: 3.5.0 message Err: Erreur: Erreur SQL DB2: SQLCODE=-104, SQLSTATE=42601, SQLERRMC=NOMBRE;DÉCLARER outParam ;FIN DE l'INSTRUCTION, PILOTE=3.53.95 SQLState: 42601 ErrorCode: -104 Erreur est survenue dans: DÉCLARER outParam NOMBRE
D'accord. Avec la Déclarer en dehors de la COMMENCER, il se plaint de ce que le NUMÉRO n'est pas prévu. Si je la déplace à l'intérieur de la COMMENCER, il se plaint que COMMENCER n'est pas prévu. J'ai changé la déclaration séparateur à # et n'a pas eu de chance non plus. Je devine votre réponse qui fonctionne pour certains DB d'autres que DB2/400
J'ai fait un certain nombre de corrections ici: 1) la
DECLARE
doit être à l'intérieur du bloc. 2)NUMBER
est uniquement pris en charge sur DB2 dans certaines versions lorsque la compatibilité est activé. 3) La/
après la déclaration est Oracle spécifiques. Vous avez besoin de changer la déclaration séparateur à Écureuil pour l'exécuter. Cela devrait fonctionner pour DB2 maintenant.J'ai été en mesure d'obtenir ce travail par la mise en au séparateur à # puis en ajoutant "APPEL" devant le nom de la procédure stockée. Cependant, je n'étais pas capable de afficher les résultats ou les params, donc ce n'est pas encore une solution efficace pour moi.
OriginalL'auteur Chrias
Dans la version pro de DbVisualizer, avec le "Processus de Marqueurs dans SQL" dans le SQL Commandant de l'option de menu est activé, il permettra le "?" param
OriginalL'auteur indybee
Je pense que si il y en a un dans l'appel doit être:
pour obtenir un résultat peut-être essayer:
n'est pas un paramètre de SORTIE de la suite de la SP?
Non, ils ne sont pas la même chose. Une procédure stockée peut produire de trois façons: par l'intermédiaire d'un jeu de résultats, un paramètre de SORTIE, et une troisième voie, que je vais appeler une valeur de retour (pas sûr du nom exact). De sorte que vous pourriez avoir quelque chose comme ceci: ?= GetListOfCheckedOutBooks( userID, en retard). Cela pourrait retourner une sorte de drapeau pour la première ?, un booléen dans la parameterindicating si l'utilisateur a au moins un retard de livre, et un jeu de résultats de tous les livres qu'ils ont actuellement sélectionnée.
OriginalL'auteur Leslie
Voici un testé exemple qui fonctionne sur l'Écureuil 3.7 avec une base de données db2 procédure stockée . L'astuce est de passe avec une transition de la procédure stockée MY_PROC_TEST d'appeler le réel de la procédure stockée PROC_TEST.
l'état de modification du séparateur dans squirrel > session > propriétés de session > SQL : @
Vous pouvez appeler le financée procédure comme ceci :
APPEL MY_PROC_TEST()@
OriginalL'auteur ratm
En Écureuil si vous modifiez le séparateur (comme indiqué ci-dessus). Toutefois, afin de voir ce que la variable est, vous devez faire ce qui suit...
Dans mon exemple, je vais mettre le délimiteur à un tildy (~). Après la dernière "fin", avant de "sélectionner". Code commence ici...
Mic Keeley
as400(db2) SQL Developer
OriginalL'auteur user6828436
l'état de modification du séparateur dans squirrel > session > propriétés de session > SQL : '#'
OriginalL'auteur Dimitri