Précédent   Forum des professionnels en informatique > Bases de données > DB2
DB2 Forum d'entraide technique sur la base de données DB2. Voir aussi -> Rubrique DB2
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 13/04/2007, 10h33   #1
Candidat au titre de Membre du Club
 
Inscription : janvier 2007
Messages : 48
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 48
Points : 11
Points : 11
Par défaut Current Path / Schema dans une procédure stockée

Bonjour,

J'ai une procédure stockée qui me renvoie une valeur:

Code :
1
2
3
4
5
6
7
 
DECLARE C CURSOR FOR
SELECT X FROM Y WHERE ...;
 
FETCH C INTO VAR;
 
RETURN VAR;
Appel:
Code :
1
2
 
SELECT Schema.maproc() FROM SYSIBM.SYSDUMMY1;
Le problème c'est que j'ai un message d'erreur comme quoi la table Y n'est pas trouvée dans le schéma.

J'ai essayé de mettre des SET CURRENT PATH / SET CURRENT SCHEMA avant le SELECT qui appelle la procédure stockée mais rien à faire...

Une idée? Merci!
jdelges est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/04/2007, 13h51   #2
Membre Expert
 
Inscription : novembre 2004
Messages : 1 298
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 1 298
Points : 1 355
Points : 1 355
Essaie en modifiant d'abord la current library avec la commande
Mercure est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/04/2007, 15h47   #3
Candidat au titre de Membre du Club
 
Inscription : janvier 2007
Messages : 48
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 48
Points : 11
Points : 11
Déso mais CHGCURLIB est une commande AS400 et pas une instruction SQL...

PS: il s'agit tjrs de la même fonction scalaire et pas procédure stockée
jdelges est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/04/2007, 16h38   #4
Membre Expert
 
Inscription : novembre 2004
Messages : 1 298
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 1 298
Points : 1 355
Points : 1 355
Citation:
... CHGCURLIB est une commande AS400
Je le sais bien ! Il faut passer la commande avant d'exécuter l'instruction SQL.
Mercure est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/04/2007, 20h37   #5
Candidat au titre de Membre du Club
 
Inscription : janvier 2007
Messages : 48
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 48
Points : 11
Points : 11
Ok, déso mais je ne suis pas sur un programme qui tourne sur l'as400 mais dans un programme java qui tourne sous windows et envoie des requêtes sql à l'as400... Je ne pense donc pas être en mesure d'exécuter une commande as400.

Enfin p-e que je me trompe et merci de prendre le temps de te pencher sur mon problème
jdelges est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/04/2007, 14h55   #6
Membre Expert
 
Inscription : novembre 2004
Messages : 1 298
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 1 298
Points : 1 355
Points : 1 355
Citation:
Je ne pense donc pas être en mesure d'exécuter une commande as400.
Je pense que si, au contraire ! Cherche dans ta doc Java, il doit certainement y avoir un moyen de lancer une commande AS400 depuis le client Java. Cela existe dans Windev, dans VB.Net, et d'autres clients sans doute que je ne connais pas.
Regarde également dans les définitions d'environnement d'exécution de Java ou dans je ne sais ni où ni comment comment vous appelez ces définitions.

D'un autre côté, je me pose ces questions.
Pourquoi faire un curseur et un FETCH plutôt qu'un simple SELECT INTO ? Ta fonction ne peut renvoyer qu'une seule variable à la fois, n'est-ce pas ?

La clause WHERE est-elle toujours la même, teste-t-elle toujours les mêmes valeurs ?

Code :
1
2
3
...
SELECT X INTO VAR FROM Y WHERE ...;
RETURN VAR;
Mercure est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/04/2007, 08h41   #7
Candidat au titre de Membre du Club
 
Inscription : janvier 2007
Messages : 48
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 48
Points : 11
Points : 11
Oui j'ai déjà exécuté des commandes as400 à partir de java (appel de programme cl ou cobol) mais cet environnement d'exécution est totalement indépendant de l'environnement sql (simple connexion et envoi de requêtes).

J'ai fait un curseur pour faire un lock de la ligne (avec select ... for update + current of) c'est d'ailleur toi qui m'a rapellé comment on peut faire un lock d'une ligne.

Je te tiens au courrant de mes investigations. Merci.
jdelges est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/04/2007, 11h45   #8
Candidat au titre de Membre du Club
 
Inscription : janvier 2007
Messages : 48
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 48
Points : 11
Points : 11
Bon je n'ai pas trouvé de solution pour ne pas écrire en dur le schéma (ou librairie) où la fonction doit aller lire les données.

Je suis reparti à 0 pour résoudre mon problème initial qui était de
Lire un numéro et l'incrémenter tout lockant la table

Je l'ai fait avec java et des transactions:

conn.setAutoCommit(false);
conn.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);

UPDATE (--> lock)

SELECT

UPDATE

COMMIT


Désolé si je n'ai pas été assez clair dans ma description du problème et merci à toi Mercure d'avoir tenté de m'aider.

à+
jdelges est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h31.


 
 
 
 
Partenaires

Hébergement Web