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 11/10/2011, 16h09   #1
Futur Membre du Club
 
Développeur Java
Inscription : octobre 2011
Messages : 82
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Développeur Java

Informations forums :
Inscription : octobre 2011
Messages : 82
Points : 16
Points : 16
Par défaut Problème requête sur une DB2 serveur AS400

Bonjour chers Collègues !

Je suis actuellement en train de développer une application en java qui attaque une base de données de type DB2 qui se situe sur un serveur AS400.

Ma connexion s'effectue et c'est lorsque je fais mon SELECT que l'erreur fatidique apparait.

J'ai une table dans laquelle il y a plusieurs colonnes. Je peux faire un SELECT sur n'importe quelle colonne mais lorsque je le fais sur celle-ci en particulier, j'obtiens :

Message: [SQL0443] *N
SQLState: 38501
ErrorCode: -443

Je suis allé voir sur le site d'IBM pour découvrir la description de cette erreur :

SQL0443
Message Text: Trigger program or external routine detected an error.
Cause Text: Either a trigger program, external procedure, or external function detected and returned an error to SQL. If the error occurred in a trigger program, the trigger was on table &4 in schema &5. If the error occurred in an external procedure or function, the external name is &4 in schema &5. The associated text is &6. If the error occurred in a trigger program, the associated text is the type of trigger program. If the error occurred in an external function, the associated text is the text of the error message returned from the external function.
Recovery Text: Refer to the joblog for more information regarding the detected error. Correct the error and try the request again.
SQLCODE or SQLCODEs: -443
SQLSTATE or SQLSTATEs: 38xxx, 38501


Lorsque je teste ma requête sur Iseries (émulateur pour l'AS400), cette dernière fonctionne parfaitement.

S'agit il des différents caractères qui peuvent se trouver dans cette colonne nommée 'NOM' (dans laquelle on retrouve des noms avec des & ou des ' ou des - ou des espaces ou des points) ?

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
public DATABASE(String url, String login, String pass) throws SQLException {
 
		Connection connection = DriverManager.getConnection(url, login, pass);
		Statement stt = connection.createStatement();
 
		try{
			//ResultSet resultat1 = stt.executeQuery("SELECT DAT, HEUR, CODE_EXP, EXPEDITEUR, REFERENCE, TYP, STATUT, DESTINATAIRE FROM MINOSFIC.UB001V01");
			ResultSet resultat2 = stt.executeQuery("SELECT NOM FROM MINOSFIC.UB001V01 ");
 
			while(resultat2.next() /*&& resultat2.next()*/){
				System.out.println("pwet");
				/*String date = resultat1.getString("DAT");
				String heure = resultat1.getString("HEUR");
				String code_exp= resultat1.getString("CODE_EXP");
				String exp = resultat1.getString("EXPEDITEUR");
				String ref = resultat1.getString("REFERENCE");
				int typ = resultat1.getInt("TYP");
				int statut = resultat1.getInt("STATUT");
				String dest = resultat1.getString("DESTINATAIRE");*/
				String nom = resultat2.getString("NOM");
				//int ag = resultat2.getInt("AG");
 
				System.out.println(/*date + "|" + heure + "|" + code_exp + "|" + exp + "|" + ref + "|" + typ + "|" + statut + "|" + dest  + "|" + */nom /*+ "|" + ag*/);
			}
 
			resultat2.close();
		}
		catch(Exception e) {
			while (e != NULL)
			{
			System.out.println("Message: " + e.getMessage());
			System.out.println("SQLState: " + ((SQLException) e).getSQLState());
			System.out.println("ErrorCode: " + ((SQLException) e).getErrorCode());
			e = ((SQLException) e).getNextException();
			}
		}
J'ai essayé la requête avec WHERE 1=0 pour voir si elle s’exécutait normalement et effectivement, elle fonctionne mais bien entendu ne me renvoie aucune ligne (logique avec ce critère de sélection).

PS : certains commentaires sont des brouillons et des tests pour trouver certaines erreurs, si vous voulez quelque chose de plus clair, je peux supprimer ce qui est inutile pour la compréhension de ce problème
Baboulinet_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2011, 16h56   #2
Membre émérite
 
Homme Tony
Développeur .NET
Inscription : novembre 2010
Messages : 570
Détails du profil
Informations personnelles :
Nom : Homme Tony
Localisation : France

Informations professionnelles :
Activité : Développeur .NET

Informations forums :
Inscription : novembre 2010
Messages : 570
Points : 821
Points : 821
Bonjour,
les " ' " peuvent l'embêter, mais si tu as été en mesure de les y mettre je trouve très étrange que tu ne sois pas en mesure de les récupérer
asmduty est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/10/2011, 17h02   #3
Futur Membre du Club
 
Développeur Java
Inscription : octobre 2011
Messages : 82
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Développeur Java

Informations forums :
Inscription : octobre 2011
Messages : 82
Points : 16
Points : 16
J'ai essayé de récupérer une ligne dans laquelle il y avait un nom sans caractères et sans espaces.
J'ai eu le même soucis (je suppose que c'est normal car il doit parcourir la colonne jusqu'à ce qu'il trouve ce nom et passe donc par des caractères ' ou autres).

Bref, ça m'avance pas plus hihi mais depuis ce matin je parcours les divers forums que ce soit anglais ou fr et personne n'est en mesure de me répondre ...

Qui veut faire son Barney Strinson et me faire un joyeux "Challenge accepted !" ?
Baboulinet_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2011, 23h32   #4
Membre chevronné
 
Avatar de Peut-êtreUneRéponse
 
Homme Guillaume VENTRE
z/OS Technical Leader
Inscription : décembre 2006
Messages : 514
Détails du profil
Informations personnelles :
Nom : Homme Guillaume VENTRE
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : z/OS Technical Leader
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : décembre 2006
Messages : 514
Points : 617
Points : 617
Hello,

Comment attaques-tu la DB, JDBC ou ODBC ?

Ci-après, une réflexion qui se transformera peut-être en piste, je me base sur mon expérience sur DB2 for z/OS attaqué par un driver CLI/ODBC.

Comme tu n'appelles pas personnellement de routine (fonction, trigger ou procédure stockée), ce doit être le driver qui fait appel à une procédure stockée pour récupérer des metadatas par exemple.

Si tu rajoutes des traces à ton driver tu devrais pouvoir avoir des informations pertinentes.
__________________
★★ Documentation Mainframe par Guillaume Ventre ★★
Peut-êtreUneRéponse est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 12/10/2011, 09h08   #5
Futur Membre du Club
 
Développeur Java
Inscription : octobre 2011
Messages : 82
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Développeur Java

Informations forums :
Inscription : octobre 2011
Messages : 82
Points : 16
Points : 16
Code :
1
2
3
String pilote = "com.ibm.as400.access.AS400JDBCDriver";
		Class.forName(pilote); 
		new DATABASE("jdbc:as400://1.0.0.6","login","pass")
J'utilise le toolkit contenu dans le jt400native.jar
Je ne sais pas ce que je peux dire de plus (je me suis remis au java il y a peu aussi )
Baboulinet_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2011, 10h23   #6
Membre chevronné
 
Avatar de Peut-êtreUneRéponse
 
Homme Guillaume VENTRE
z/OS Technical Leader
Inscription : décembre 2006
Messages : 514
Détails du profil
Informations personnelles :
Nom : Homme Guillaume VENTRE
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : z/OS Technical Leader
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : décembre 2006
Messages : 514
Points : 617
Points : 617
Donc tu utilises le driver JDBC. Je sais comment activer les traces CLI/ODBC sur unix et windows mais pas JDBC sans effectuer de recherche.

Si tu n'as pas d'autres réponses, essai de chercher comment activer les traces JDBC.

.
__________________
★★ Documentation Mainframe par Guillaume Ventre ★★
Peut-êtreUneRéponse est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 12/10/2011, 10h52   #7
Futur Membre du Club
 
Développeur Java
Inscription : octobre 2011
Messages : 82
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Développeur Java

Informations forums :
Inscription : octobre 2011
Messages : 82
Points : 16
Points : 16
J'ai effectué pas mal de recherches avec un collègue au bureau qui lui connait bien l'environnement dans lequel je voulais effectuer ma requête.

Il a eu du mal également mais a réussi à trouver de quoi venait le problème.

Ma requête attaque en fait une vue. Dans cette vue, il y a de nombreuses procédures d'utilisateur qui sont utilisées. On en a déduit que le problème venait de là.

Mon collègue a donc copié le résultat de cette vue (disponible sous l'émulateur as400 si tu me suis toujours ) et l'a copié dans une table dans un fichier temporaire pour que je puisse effectuer ma requête malgré le fait que j'attaquerai une table différente du coup (le nom est différent mais la table est juste une copie conforme de ce que je voulais avoir en fait).

Qu'en penses tu ? Moi j'ai vomis 3 fois
Baboulinet_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2011, 11h04   #8
Membre chevronné
 
Avatar de Peut-êtreUneRéponse
 
Homme Guillaume VENTRE
z/OS Technical Leader
Inscription : décembre 2006
Messages : 514
Détails du profil
Informations personnelles :
Nom : Homme Guillaume VENTRE
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : z/OS Technical Leader
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : décembre 2006
Messages : 514
Points : 617
Points : 617
__________________
★★ Documentation Mainframe par Guillaume Ventre ★★
Peut-êtreUneRéponse est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 12/10/2011, 11h08   #9
Futur Membre du Club
 
Développeur Java
Inscription : octobre 2011
Messages : 82
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Développeur Java

Informations forums :
Inscription : octobre 2011
Messages : 82
Points : 16
Points : 16
Merci en tout cas !
Passe une excellente journée, la mienne s'annonce pas mal désormais haha
Baboulinet_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2011, 11h40   #10
Membre Expert
 
Patrick
Inscription : mai 2008
Messages : 821
Détails du profil
Informations personnelles :
Nom : Patrick
Âge : 42
Localisation : France, Hérault (Languedoc Roussillon)

Informations forums :
Inscription : mai 2008
Messages : 821
Points : 1 041
Points : 1 041
Citation:
Envoyé par Baboulinet_ Voir le message
Ma requête attaque en fait une vue. Dans cette vue, il y a de nombreuses procédures d'utilisateur qui sont utilisées. On en a déduit que le problème venait de là.

Mon collègue a donc copié le résultat de cette vue (disponible sous l'émulateur as400 si tu me suis toujours ) et l'a copié dans une table dans un fichier temporaire pour que je puisse effectuer ma requête malgré le fait que j'attaquerai une table différente du coup (le nom est différent mais la table est juste une copie conforme de ce que je voulais avoir en fait).

Qu'en penses tu ? Moi j'ai vomis 3 fois
Dans ta vue, il n'y a pas de procédures derrière mais surement des fonctions ou des UDTF. Il est probable qu'il ne trouve pas les fonctions car tu utilises la convention SQL au lieu de SYS. Pour que ça marche, tu enrichis ta connexion avec "naming system" pour se baser sur la liste des bibliothèques et tout devrait rentrer dans l'ordre. Mais attention, si ton schema n'est pas dans la liste des bibliothèques (liste que tu peux aussi mettre dans ta chaine de connexion) tu ne devras plus qualifier du type SCHEMA.TABLE mais SCHEMA/TABLE.
K2R400 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2011, 11h45   #11
Membre Expert
 
Patrick
Inscription : mai 2008
Messages : 821
Détails du profil
Informations personnelles :
Nom : Patrick
Âge : 42
Localisation : France, Hérault (Languedoc Roussillon)

Informations forums :
Inscription : mai 2008
Messages : 821
Points : 1 041
Points : 1 041
Pour info les AS/400 n'existent plus, on l'appelle désormais un "IBM i"
K2R400 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2011, 13h27   #12
Membre émérite
 
Homme Tony
Développeur .NET
Inscription : novembre 2010
Messages : 570
Détails du profil
Informations personnelles :
Nom : Homme Tony
Localisation : France

Informations professionnelles :
Activité : Développeur .NET

Informations forums :
Inscription : novembre 2010
Messages : 570
Points : 821
Points : 821
L'AS400 n'existe plus ?
Pourquoi alors si tu fais une simple recherche google iSeries et AS400 sont distingués ?

Exemple pour le premier résultat d'une recherche avec "IBM i"

"IBM i for Power Systems y compris AS/400, iSeries et System i."

asmduty est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 12/10/2011, 14h32   #13
Futur Membre du Club
 
Développeur Java
Inscription : octobre 2011
Messages : 82
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Développeur Java

Informations forums :
Inscription : octobre 2011
Messages : 82
Points : 16
Points : 16
si ça existait plus j'aurai vomis pour rien
Baboulinet_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2011, 15h28   #14
Membre Expert
 
Patrick
Inscription : mai 2008
Messages : 821
Détails du profil
Informations personnelles :
Nom : Patrick
Âge : 42
Localisation : France, Hérault (Languedoc Roussillon)

Informations forums :
Inscription : mai 2008
Messages : 821
Points : 1 041
Points : 1 041
Citation:
Envoyé par asmduty Voir le message
L'AS400 n'existe plus ?
Pourquoi alors si tu fais une simple recherche google iSeries et AS400 sont distingués ?
Comme on distingue Cro Magnon de l'homo sapiens
K2R400 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2011, 16h23   #15
Membre émérite
 
Homme Tony
Développeur .NET
Inscription : novembre 2010
Messages : 570
Détails du profil
Informations personnelles :
Nom : Homme Tony
Localisation : France

Informations professionnelles :
Activité : Développeur .NET

Informations forums :
Inscription : novembre 2010
Messages : 570
Points : 821
Points : 821
http://www-03.ibm.com/systems/fr/i/

Donc IBM sur son propre site se mélange lui-même les pinceaux sur ses propres systèmes...
asmduty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2011, 16h46   #16
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 641
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 641
Points : 2 634
Points : 2 634
Pourquoi donc ?

Essayez d'acheter un as400 sur le site d'ibm

l'as400 est mort en 2000, aujourd'hui ibm vend des power system (depuis 2008) et le soft s'appel IBM i
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2011, 17h07   #17
Membre émérite
 
Homme Tony
Développeur .NET
Inscription : novembre 2010
Messages : 570
Détails du profil
Informations personnelles :
Nom : Homme Tony
Localisation : France

Informations professionnelles :
Activité : Développeur .NET

Informations forums :
Inscription : novembre 2010
Messages : 570
Points : 821
Points : 821
Et donc IBM a gracieusement offert le nouveau soft à tous ses clients ?
asmduty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2011, 19h26   #18
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 641
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 641
Points : 2 634
Points : 2 634
je ne retrouve pas l'article original, celui-là étant un plagia copy/past ..

http://www.developpez.net/forums/d95...power-systems/

Bref utilisez le terme que vous préférez, perso je m'en tappe.
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2011, 08h56   #19
Membre émérite
 
Homme Tony
Développeur .NET
Inscription : novembre 2010
Messages : 570
Détails du profil
Informations personnelles :
Nom : Homme Tony
Localisation : France

Informations professionnelles :
Activité : Développeur .NET

Informations forums :
Inscription : novembre 2010
Messages : 570
Points : 821
Points : 821
Encore pire, les machines qui ne sont plus des AS400 mes des Iseries ou autre, je ne pense pas qu'elles aient été offertes pour remplacer les AS400.
Ok ce n'est plus produit, mais pour autant ça existe encore.
C'est comme si tu me dit les NES ça n'existe plus ...
asmduty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2011, 09h09   #20
Futur Membre du Club
 
Développeur Java
Inscription : octobre 2011
Messages : 82
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Développeur Java

Informations forums :
Inscription : octobre 2011
Messages : 82
Points : 16
Points : 16
Citation:
Envoyé par asmduty Voir le message
C'est comme si tu me dit les NES ça n'existe plus ...
Et j'en ai vu à la braderie de ma tite ville ce week end haha

Sinon, vi ce n'est plus produit, mais ça existe encore et c'est pas encore mort puisque malgré qu'il existe des soft plus puissants, l'AS/400 reste tout de même bien utile pour les boîtes qui se basent dessus depuis plus de 10-20 ans.

Donc dans mon cas (et pas dans mon cul ) on parlera d'AS/400 et non pas d'IBM i

Maintenant, aimez vous les uns dans les autres, esclaves !
Baboulinet_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h28.


 
 
 
 
Partenaires

Hébergement Web