Précédent   Forum des professionnels en informatique > Bases de données > Sybase
Sybase Forum sur la base de données Sybase. Avant de poster -> F.A.Q Sybase, Tutoriels Sybase
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 20/06/2007, 10h26   #1
Nouveau Membre du Club
 
Inscription : février 2006
Messages : 107
Détails du profil
Informations personnelles :
Âge : 29
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : février 2006
Messages : 107
Points : 39
Points : 39
Par défaut Sybase ASE : erreur JZ0P1

Bonjour,
J'utilise un ETL pour transferer des données d'un serveur Sybase à un autre. Pour indiquer que le traitement s'est bien passé, j'execute une procédure stockée. Cette procédure plante avec le message d'erreur suivant:

Code :
0 : JZ0P1 : java.sql.SQLException: JZ0P1: Type de résultat inattendu.
Cependant quand j'utilise la meme procédure stockée dans mon client sybase, elle s'execute sans problemes apparents...

Quelq'un a t il deja eu ce genre de soucis?

Merci d'avance
n.roussaly est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2007, 10h46   #2
Rédacteur/Modérateur
 
Inscription : janvier 2006
Messages : 1 301
Détails du profil
Informations personnelles :
Âge : 52

Informations forums :
Inscription : janvier 2006
Messages : 1 301
Points : 1 505
Points : 1 505
Envoyer un message via AIM à mpeppler
A priori cela voudrait dire que le code Java n'est pas écrit pour traiter certains type de résultats (p.ex. le "status result" qui est renvoyé par la proc stockée).

Si tu es en 12.5.1 ou plus récent tu pourrais essayer de positionner l'option "proc_return_status" à off pour la connexion:
Code :
1
2
 
SET proc_return_status off
Michael
__________________
Michael Peppler
Membre de TeamSybase - www.teamsybase.com

"A successful [software] tool is one that was used to do something undreamed of by its author." -- S. C. Johnson
mpeppler est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2007, 11h10   #3
Nouveau Membre du Club
 
Inscription : février 2006
Messages : 107
Détails du profil
Informations personnelles :
Âge : 29
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : février 2006
Messages : 107
Points : 39
Points : 39
Les résultats sont identiques en mettant cette variable à OFF.

Quand j'utilise un client qui lui meme utilise le meme driver JDBC que celui du logiciel, la procédure s'execute correctement également. Donc a priori je peux écarter le probleme du driver.

C'est étonnant que cela ne s'applique qu'à cette procédure, les autres s'executent correctement.

Les retours qu'effectue la proc sont:

Code :
1
2
3
RETURN 0
RETURN -100
...
A priori dans le cadre ou je l'execute le retour est 0, ce qui ne me semble pas un résultat compliqué à traiter...

La j'avoue que je vois po bien comment m'en sortir
n.roussaly est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2007, 12h53   #4
Rédacteur/Modérateur
 
Inscription : janvier 2006
Messages : 1 301
Détails du profil
Informations personnelles :
Âge : 52

Informations forums :
Inscription : janvier 2006
Messages : 1 301
Points : 1 505
Points : 1 505
Envoyer un message via AIM à mpeppler
Est-ce que la procédure comporte du SQL qui inclus des COMPUTE BY ?

Si la proc n'est pas immense tu pourrais peut-être la poster ici pour qu'on analyse le problème ?

Une autre possibilité est de mettre en place Ribo pour analyser le flux entre le client et le serveur et pour voir quelle type de résultat genère ce problème.

Michael
__________________
Michael Peppler
Membre de TeamSybase - www.teamsybase.com

"A successful [software] tool is one that was used to do something undreamed of by its author." -- S. C. Johnson
mpeppler est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2007, 12h57   #5
Rédacteur/Modérateur
 
Inscription : janvier 2006
Messages : 1 301
Détails du profil
Informations personnelles :
Âge : 52

Informations forums :
Inscription : janvier 2006
Messages : 1 301
Points : 1 505
Points : 1 505
Envoyer un message via AIM à mpeppler
Voici la documentation de ce message d'erreur:
Citation:
Unexpected result type.

Description: The database has returned a result that the statement cannot return to the application, or that the application is not expecting at this point. This generally indicates that the application is using JDBC incorrectly to execute the query or stored procedure. If the JDBC application is connected to an Open Server application, it may indicate an error in the Open Server application that causes the Open Server to send unexpected sequences of results.

Action: Use the com.sybase.utils.Debug(true, "ALL") debugging tools to try to figure out what unexpected result is seen, and to understand its causes.
Je ne sais pas si tu peux positionner le mode Debug sur ta connexion...

Michael
__________________
Michael Peppler
Membre de TeamSybase - www.teamsybase.com

"A successful [software] tool is one that was used to do something undreamed of by its author." -- S. C. Johnson
mpeppler est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2007, 13h05   #6
Nouveau Membre du Club
 
Inscription : février 2006
Messages : 107
Détails du profil
Informations personnelles :
Âge : 29
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : février 2006
Messages : 107
Points : 39
Points : 39
Voici la procédure :

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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
 
CREATE PROCEDURE dbo.PS_CREA_ANO_ENVIRONNEMENT(@PKFGT numeric(8), @PKFET numeric(8), @TYP_ANO_CDA char(12), @GRAV_CDA char(2), @PARAM1 char(80), @PARAM2 char(80), @JOB_LB char(25), @PROG_LB char(25)) 
/* Création d'anomalie de bas niveau (accès BD, acc  ès serveur fichier, lecture/écriture fichier
@PKFGT        : identifiant flux global traité
@PKFET        : identifiant flux elementaire traité 
@TYP_ANO_CDA  : code alphanumerique du type anomalie
@GRAV_CDA     : code alphanumerique de la gravit    é
@PARAM1       : 
@PARAM2       : 
@JOB_LB       : job appellant
@PROG_LB      : etape dans le job */
 
AS 
 
BEGIN 
    declare  
       @GRAV_CDN    numeric(8),  
       @TYP_ANO_CDN numeric(8),
       @DATEJOUR    datetime,
       @ERR              int,
       @MESSAGE_IN         char(128),
       @MESSAGE_OUT        char(128),
       @TYP_ANO_FORMAT_MSG_LB      char(128)
       IF @PKFGT=0 OR @PKFGT IS NULL OR @PKFET=0 OR  @PKFET IS NULL
            begin
             RETURN -500
            end
        else
            /* Contrôle existence du flux */
            IF NOT EXISTS(SELECT * FROM ANO_FLUX_GLOBAL_TRAITE WHERE FLUX_TRAIT_CDN=@PKFGT)
            begin
                RETURN -400
            end
            else
                 IF NOT EXISTS(SELECT * FROM ANO_FLUX_ELEM_TT WHERE FLUX_ELEM_TT_CDN=@PKFET)
                begin
                    RETURN -400
                end
                else
                /* Test type anomalie*/
                SELECT @TYP_ANO_CDN=TYP_ANO_CDN,@TYP_ANO_FORMAT_MSG_LB=TYP_ANO_FORMAT_MSG_LB FROM ANO_TYPE_ANOMALIE WHERE TYP_ANO_CDA=@TYP_ANO_CDA
                IF @TYP_ANO_CDN =NULL 
                begin
                 RETURN -600
                end
                else
                    /* Test gravité*/
                    SELECT @GRAV_CDN=GRAV_CDN FROM ANO_GRAVITE WHERE GRAV_CDA=@GRAV_CDA
                    IF @GRAV_CDN=NULL
                    begin
                    RETURN -600
                    end 
                    else
                         begin            
                        /* Calcul du message ANO_MSG_LB */
                        /* replace de %1 */
                        SELECT @MESSAGE_IN=@TYP_ANO_FORMAT_MSG_LB
                        EXEC PS_REPLACE @MESSAGE_IN, @PARAM1 ,'P1',@MESSAGE_OUT OUT
                        /* replace de %2 */
                        IF @PARAM2 <>"" OR @PARAM2<>NULL OR RTRIM(@PARAM2)<>""
                        begin
                            SELECT @MESSAGE_IN=@MESSAGE_OUT
                            EXEC PS_REPLACE @MESSAGE_IN, @PARAM2 ,'P2',@MESSAGE_OUT OUT
                        end     
                       else
                       /* Calcul date jour*/
                        SELECT getdate()
                        SELECT @DATEJOUR=getdate()
                       /* Insert de l'anomalie */ 
                       INSERT INTO ANO_ANOMALIE(TYP_ANO_CDN,FLUX_ELEM_TT_CDN,FLUX_TRAIT_CDN,GRAV_CDN,ANO_DATE_DT,ANO_PARAM1_LB,ANO_PARAM2_LB,ANO_MSG_LB,ANO_JOB_LB,ANO_PROG_LB)
                       VALUES (@TYP_ANO_CDN,@PKFET,@PKFGT,@GRAV_CDN, @DATEJOUR, @PARAM1 , @PARAM2,  @MESSAGE_OUT, @JOB_LB , @PROG_LB )
                       COMMIT TRAN
                       RETURN 0
                       end
 
END
 
GO


Pour exemple je vous met une de celles qui marche correctement:

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
37
38
 
 
 
CREATE PROCEDURE dbo.PS_CREA_FLUXTT_GLOBAL (@PKFG numeric(8), @PKFGT numeric(8) output)   
AS
 
/* Création d'un flux global traité (à une date donnée)*/
BEGIN 
      declare  
      @DATEDEB        datetime
 
        /* Controle valeur PKFG :     null et apparteient à la table des flux*/
        IF @PKFG=0 OR @PKFG IS NULL 
            begin
               RETURN -500
            end
        else
        /* Contrôle existence du flux */
        IF NOT EXISTS(SELECT * FROM ANO_FLUX_GLOBAL   WHERE FLUX_CDN=@PKFG)
            begin
            RETURN -400
            end
        else
         begin            
        /* calcul date debut alimentation*/
        SELECT @DATEDEB=getdate()
        /* Insertion dans ANO_FLUX_ELEM_TT*/
        INSERT INTO ANO_FLUX_GLOBAL_TRAITE(STATUT_CDN,FLUX_CDN,FLUX_TRAITE_ALIM_DEBUT_DT)  VALUES (1,@PKFG,@DATEDEB)
        /* lecture de la clé dans ANO_FLUX_GLOBAL_TT*/
        SELECT @PKFGT=MAX(FLUX_TRAIT_CDN) FROM ANO_FLUX_GLOBAL_TRAITE 
        COM MIT 
        RETURN 0
        end
 
 
END
 
GO


A priori j'avais deja vu la doc associée à cette erreur, mais je ne peux pas établir le mode debug.
En effet mon SQL est inclus dans du JAVA via l'outil que j'utilise
De meme j'ai pas l'impression qu'il y ait du compute

Merci pour votre aide
n.roussaly est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2007, 13h27   #7
Nouveau Membre du Club
 
Inscription : février 2006
Messages : 107
Détails du profil
Informations personnelles :
Âge : 29
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : février 2006
Messages : 107
Points : 39
Points : 39
Je suis pas sur que ribo me soit utile.
En effet j'ouvre une connexion avec une base, j'execute une procédure.
Je ne fait rien d'autre, de plus le retour de la procédure ne m'interesse pas...
n.roussaly est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2007, 13h44   #8
Rédacteur/Modérateur
 
Inscription : janvier 2006
Messages : 1 301
Détails du profil
Informations personnelles :
Âge : 52

Informations forums :
Inscription : janvier 2006
Messages : 1 301
Points : 1 505
Points : 1 505
Envoyer un message via AIM à mpeppler
A mon avis le problème est ici:
Code :
1
2
3
4
5
6
7
8
9
10
 
                      else
                       /* Calcul date jour*/
                        SELECT getdate()       <====================
                        SELECT @DATEJOUR=getdate()
                       /* Insert de l'anomalie */ 
                       INSERT INTO ANO_ANOMALIE(TYP_ANO_CDN,FLUX_ELEM_TT_CDN,FLUX_TRAIT_CDN,GRAV_CDN,ANO_DATE_DT,ANO_PARAM1_LB,ANO_PARAM2_LB,ANO_MSG_LB,ANO_JOB_LB,ANO_PROG_LB)
                       VALUES (@TYP_ANO_CDN,@PKFET,@PKFGT,@GRAV_CDN, @DATEJOUR, @PARAM1 , @PARAM2,  @MESSAGE_OUT, @JOB_LB , @PROG_LB )
                       COMMIT TRAN
                       RETURN 0
vu que le premier select getdate() va générer une ligne retournée au client - si le client n'est pas codé pour la traiter il peut évidemment y avoir un problème...

Michael
__________________
Michael Peppler
Membre de TeamSybase - www.teamsybase.com

"A successful [software] tool is one that was used to do something undreamed of by its author." -- S. C. Johnson
mpeppler est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2007, 13h52   #9
Nouveau Membre du Club
 
Inscription : février 2006
Messages : 107
Détails du profil
Informations personnelles :
Âge : 29
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : février 2006
Messages : 107
Points : 39
Points : 39
Je teste ca (faut que je demande la permission au client avant) et je vous tiens au courant...
Si ca n'est que ca, ca devrait bien se passer
Merci
n.roussaly est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2007, 14h38   #10
Nouveau Membre du Club
 
Inscription : février 2006
Messages : 107
Détails du profil
Informations personnelles :
Âge : 29
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : février 2006
Messages : 107
Points : 39
Points : 39
Bon alors je pense que je suis devant un cas particulierement cosmique!
En fait il existe deux soucis distincts:
le premier venait que Sybase est capable d'interpréter "" comme un blanc mais quand c'est lancé via mon logiciel il interprete ca comme un nom de colonne. Ce qui entrainait une non mise à jour de ma table résultat: voir code ci dessous

Code :
1
2
3
4
5
6
7
8
SELECT @MESSAGE_IN=@TYP_ANO_FORMAT_MSG_LB
                        EXEC PS_REPLACE @MESSAGE_IN, @PARAM1 ,'P1',@MESSAGE_OUT OUT
                        /* replace de %2 */
                        IF @PARAM2 <>"" OR @PARAM2<>NULL OR RTRIM(@PARAM2)<>"" <===================PB!
                        begin
                            SELECT @MESSAGE_IN=@MESSAGE_OUT
                            EXEC PS_REPLACE @MESSAGE_IN, @PARAM2 ,'P2',@MESSAGE_OUT OUT
                        end

le second soucis est celui détécté précédemment a savoir que quand le code est executé par mon ETL alors il y a un message d'erreur mais c'est non bloquant(voir message d'erreur de départ)
Pour résoudre ce soucis j'ai essayé de virer le SELECT comme indiqué au dessus mais le problème reste le meme. (ca entraine meme un autre soucis à savoir que l'affectation juste en dessous ne marche plus)

Donc je vais essayer de trouver d'ou ca peut venir sauf si notre tres cher administrateur (super spécialiste mickael) le trouve avant moi
La suite tres bientot
n.roussaly est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2007, 15h30   #11
Rédacteur/Modérateur
 
Inscription : janvier 2006
Messages : 1 301
Détails du profil
Informations personnelles :
Âge : 52

Informations forums :
Inscription : janvier 2006
Messages : 1 301
Points : 1 505
Points : 1 505
Envoyer un message via AIM à mpeppler
L'interprétation de "" comme un nom de colonne vient de l'option "quoted_identifiers" qui est visiblement positionnée à "on". Dans cette situation les doubles quotes sont utilisées pour entourer les noms de colonnes, etc. pour les différentier des noms réservés, et il faut utiliser les simples quotes '' pour la les chaines de charactères.

Par contre pour ton autre problème je ne vois pas vraiment...

Michael
__________________
Michael Peppler
Membre de TeamSybase - www.teamsybase.com

"A successful [software] tool is one that was used to do something undreamed of by its author." -- S. C. Johnson
mpeppler est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2007, 16h06   #12
Nouveau Membre du Club
 
Inscription : février 2006
Messages : 107
Détails du profil
Informations personnelles :
Âge : 29
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : février 2006
Messages : 107
Points : 39
Points : 39
Alors en fait le probleme vient de la procédure imbriquée: REPLACE.
En effet cette procédure effectue des SELECT (pb identifié grace à ton post précédent) que le logiciel d'ETL ne sait pas quoi faire. Du coup en les retirant tout simplement, le logiciel d'ETL ne met plus d'erreurs.
Dans le cas ou les select se font dans la procédure executée, le probleme ne se pose pas.
J'espere avoir été clair.
Merci beaucoup pour ton aide Mickael, en tous cas les pistes étaient toutes bonnes... donc bravo
n.roussaly 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 22h27.


 
 
 
 
Partenaires

Hébergement Web