IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

DB2 Discussion :

Problème requête sur une DB2 serveur AS400


Sujet :

DB2

  1. #1
    Membre du Club
    Profil pro
    Développeur Java
    Inscrit en
    Octobre 2011
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2011
    Messages : 137
    Points : 56
    Points
    56
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Points : 1 327
    Points
    1 327
    Par défaut
    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
    Le Porc est un loup pour le Porc.

  3. #3
    Membre du Club
    Profil pro
    Développeur Java
    Inscrit en
    Octobre 2011
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2011
    Messages : 137
    Points : 56
    Points
    56
    Par défaut
    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 !" ?

  4. #4
    Membre éclairé Avatar de Peut-êtreUneRéponse
    Homme Profil pro
    IT Specialist - IBM Z
    Inscrit en
    Décembre 2006
    Messages
    548
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : IT Specialist - IBM Z
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2006
    Messages : 548
    Points : 801
    Points
    801
    Par défaut
    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.

  5. #5
    Membre du Club
    Profil pro
    Développeur Java
    Inscrit en
    Octobre 2011
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2011
    Messages : 137
    Points : 56
    Points
    56
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 )

  6. #6
    Membre éclairé Avatar de Peut-êtreUneRéponse
    Homme Profil pro
    IT Specialist - IBM Z
    Inscrit en
    Décembre 2006
    Messages
    548
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : IT Specialist - IBM Z
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2006
    Messages : 548
    Points : 801
    Points
    801
    Par défaut
    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.

    .

  7. #7
    Membre du Club
    Profil pro
    Développeur Java
    Inscrit en
    Octobre 2011
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2011
    Messages : 137
    Points : 56
    Points
    56
    Par défaut
    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

  8. #8
    Membre éclairé Avatar de Peut-êtreUneRéponse
    Homme Profil pro
    IT Specialist - IBM Z
    Inscrit en
    Décembre 2006
    Messages
    548
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : IT Specialist - IBM Z
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2006
    Messages : 548
    Points : 801
    Points
    801
    Par défaut

  9. #9
    Membre du Club
    Profil pro
    Développeur Java
    Inscrit en
    Octobre 2011
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2011
    Messages : 137
    Points : 56
    Points
    56
    Par défaut
    Merci en tout cas !
    Passe une excellente journée, la mienne s'annonce pas mal désormais haha

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    821
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2008
    Messages : 821
    Points : 1 084
    Points
    1 084
    Par défaut
    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.

  11. #11
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    821
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2008
    Messages : 821
    Points : 1 084
    Points
    1 084
    Par défaut
    Pour info les AS/400 n'existent plus, on l'appelle désormais un "IBM i"

  12. #12
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Points : 1 327
    Points
    1 327
    Par défaut
    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."

    Le Porc est un loup pour le Porc.

  13. #13
    Membre du Club
    Profil pro
    Développeur Java
    Inscrit en
    Octobre 2011
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2011
    Messages : 137
    Points : 56
    Points
    56
    Par défaut
    si ça existait plus j'aurai vomis pour rien

  14. #14
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    821
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2008
    Messages : 821
    Points : 1 084
    Points
    1 084
    Par défaut
    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

  15. #15
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Points : 1 327
    Points
    1 327
    Par défaut
    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...
    Le Porc est un loup pour le Porc.

  16. #16
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    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

  17. #17
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Points : 1 327
    Points
    1 327
    Par défaut
    Et donc IBM a gracieusement offert le nouveau soft à tous ses clients ?
    Le Porc est un loup pour le Porc.

  18. #18
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    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.

  19. #19
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Points : 1 327
    Points
    1 327
    Par défaut
    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 ...
    Le Porc est un loup pour le Porc.

  20. #20
    Membre du Club
    Profil pro
    Développeur Java
    Inscrit en
    Octobre 2011
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2011
    Messages : 137
    Points : 56
    Points
    56
    Par défaut
    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 !

Discussions similaires

  1. Problème de requête sur une vue Hibernate
    Par littlebear dans le forum Hibernate
    Réponses: 16
    Dernier message: 05/01/2009, 14h48
  2. Petit problème de requête sur une arborescence.
    Par grandpa006 dans le forum Requêtes
    Réponses: 1
    Dernier message: 06/03/2008, 09h29
  3. [Lazarus] Problème de requête sur une base de données
    Par bubulemaster dans le forum Lazarus
    Réponses: 1
    Dernier message: 09/11/2007, 18h14
  4. [SQL-SERVER 2000] Problème de requête sur une seule ligne
    Par Sytchev3 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 05/04/2006, 16h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo