ORA-00911 Invalid Character [Résolu/Fermé]

Messages postés
3292
Date d'inscription
lundi 10 novembre 2008
Statut
Membre
Dernière intervention
2 mars 2016
- - Dernière réponse : anadeveloppeur
Messages postés
156
Date d'inscription
samedi 10 septembre 2005
Statut
Membre
Dernière intervention
21 février 2019
- 21 févr. 2019 à 12:02
Bonjour,

Lorsque j'execute ma requète je recois une erreur du type invalid character, mais il ne me signale pas la ligne de cette erreur...
Ma requète faisant plus de 100 lignes je suis en galère...
Quelqu'un à une solution pour avoir le numéro de ligne de l'erreur?

A savoir que sous SQL developper si je lance la requete elle me donne le bon résultat, mais si je la lance en mode "Executer le plan d'execution" la elle plante...

Je travaille avec SQL developper et voilà la requete:

SELECT NULL AS CODEFILS, NULL AS CODEEXTERNEFILS, CODEPERE, CODE_GP, CODE_DPT, CODEEXTERNEPERE,MONTANT,LIBELLE from
(SELECT ROWNUM as RNUM, CODEPERE, CODE_GP, CODE_DPT, CODEEXTERNEPERE,MONTANT,LIBELLE from
(SELECT nmc_ue_cdnmccmr AS CODEPERE,
nmc_gp_cdnmccmr AS CODE_GP,
nmc_dpt_cdnmccmr AS CODE_DPT,
nmc_ue_cdextnmccmr AS CODEEXTERNEPERE,
sum(mvc.montant) as MONTANT,
nmc_ue_lbnmccmr AS LIBELLE
FROM
( SELECT nmc_dpt.cdresdis nmc_dpt_cdresdis,
nmc_fam.cdnmccmr nmc_fam_cdnmccmr,
nmc_ue.cdstrnmccmr nmc_ue_cdstrnmccmr,
nmc_ue.cdextnmccmr nmc_ue_cdextnmccmr,
nmc_gp.cdextnmccmr nmc_gp_cdextnmccmr,
nmc_dpt.cdextnmccmr nmc_dpt_cdextnmccmr,
nmc_gp.cdnmccmr nmc_gp_cdnmccmr,
nmc_dpt.cdnmccmr nmc_dpt_cdnmccmr,
nmc_ue.lbnmccmr nmc_ue_lbnmccmr,
nmc_ue.cdnmccmr nmc_ue_cdnmccmr
FROM rgxtnmc nmc_mag
INNER JOIN rgxthnm hnm_mag_dpt
ON hnm_mag_dpt.cdnmccmrfll =nmc_mag.cdnmccmr
AND((hnm_mag_dpt.dtfinlienmc IS NOT NULL
AND TO_TIMESTAMP('08/01/2010','dd/MM/yyyy') BETWEEN hnm_mag_dpt.dtdeblienmc AND hnm_mag_dpt.dtfinlienmc)
OR (hnm_mag_dpt.dtfinlienmc IS NULL
AND TO_TIMESTAMP('08/01/2010','dd/MM/yyyy') >=hnm_mag_dpt.dtdeblienmc))
INNER JOIN rgxtnmc nmc_dpt
ON nmc_dpt.cdnmccmr =hnm_mag_dpt.cdnmccmr
AND nmc_dpt.cdresdis = 8
AND((nmc_dpt.dtfinacvnmc IS NULL
OR (nmc_dpt.dtfinacvnmc >=TO_TIMESTAMP('08/01/2010','dd/MM/yyyy')))
AND (nmc_dpt.dtdebacvnmc <=TO_TIMESTAMP('08/01/2010','dd/MM/yyyy')))
INNER JOIN rgxthnm hnm_dpt_gp
ON hnm_dpt_gp.cdnmccmrfll =nmc_dpt.cdnmccmr
AND((hnm_dpt_gp.dtfinlienmc IS NOT NULL
AND TO_TIMESTAMP('08/01/2010','dd/MM/yyyy') BETWEEN hnm_dpt_gp.dtdeblienmc AND hnm_dpt_gp.dtfinlienmc)
OR(hnm_dpt_gp.dtfinlienmc IS NULL
AND TO_TIMESTAMP('08/01/2010','dd/MM/yyyy') >= hnm_dpt_gp.dtdeblienmc))
INNER JOIN rgxtnmc nmc_gp
ON nmc_gp.cdnmccmr =hnm_dpt_gp.cdnmccmr
AND ((nmc_gp.dtfinacvnmc IS NULL
OR (nmc_gp.dtfinacvnmc >= TO_TIMESTAMP('08/01/2010','dd/MM/yyyy')))
AND (nmc_gp.dtdebacvnmc <=TO_TIMESTAMP('08/01/2010','dd/MM/yyyy')))
INNER JOIN rgxthnm hnm_gp_ue
ON hnm_gp_ue.cdnmccmrfll =nmc_gp.cdnmccmr
AND ((hnm_gp_ue.dtfinlienmc IS NOT NULL
AND TO_TIMESTAMP('08/01/2010','dd/MM/yyyy') BETWEEN hnm_gp_ue.dtdeblienmc AND hnm_gp_ue.dtfinlienmc)
OR (hnm_gp_ue.dtfinlienmc IS NULL
AND TO_TIMESTAMP('08/01/2010','dd/MM/yyyy') >= hnm_gp_ue.dtdeblienmc))
INNER JOIN rgxtnmc nmc_ue
ON nmc_ue.cdnmccmr =hnm_gp_ue.cdnmccmr
AND nmc_ue.cdstrnmccmr = 2
AND ((nmc_ue.dtfinacvnmc IS NULL
OR (nmc_ue.dtfinacvnmc >=TO_TIMESTAMP('08/01/2010','dd/MM/yyyy')))
AND (nmc_ue.dtdebacvnmc <=TO_TIMESTAMP('08/01/2010','dd/MM/yyyy')))
INNER JOIN rgxthnm hnm_ue_fam
ON hnm_ue_fam.cdnmccmrfll =nmc_ue.cdnmccmr
AND ((hnm_ue_fam.dtfinlienmc IS NOT NULL
AND TO_TIMESTAMP('08/01/2010','dd/MM/yyyy') BETWEEN hnm_ue_fam.dtdeblienmc AND hnm_ue_fam.dtfinlienmc)
OR (hnm_ue_fam.dtfinlienmc IS NULL
AND TO_TIMESTAMP('08/01/2010','dd/MM/yyyy') >= hnm_ue_fam.dtdeblienmc))
INNER JOIN rgxtnmc nmc_fam
ON nmc_fam.cdnmccmr =hnm_ue_fam.cdnmccmr
AND ((nmc_fam.dtfinacvnmc IS NULL
OR (nmc_fam.dtfinacvnmc >=TO_TIMESTAMP('08/01/2010','dd/MM/yyyy')))
AND (nmc_fam.dtdebacvnmc <=TO_TIMESTAMP('08/01/2010','dd/MM/yyyy')))
WHERE NOT EXISTS
(SELECT etn.CDNMCCMR
FROM rgxtetn etn
WHERE ((etn.dtfinlieeat IS NOT NULL
AND TO_TIMESTAMP ('08/01/2010', 'dd/MM/yyyy') BETWEEN etn.dtdebeatnmc AND etn.dtfinlieeat)
OR(etn.dtfinlieeat IS NULL
AND TO_TIMESTAMP ('08/01/2010', 'dd/MM/yyyy') >= etn.dtdebeatnmc))
AND etn.cdeatobjrgx IN (10,12)
AND ( etn.cdnmccmr = nmc_dpt.cdnmccmr
OR etn.cdnmccmr = nmc_gp.cdnmccmr
OR etn.cdnmccmr = nmc_ue.cdnmccmr)
)

) STRUCTURE,
(SELECT mvc.vlmntmvt, mvc.cdnmccmr, mvc.orvalmnt,
(case
when mvc.orvalmnt = 'C' then mvc.vlmntmvt
else -mvc.vlmntmvt
end ) as montant
FROM rgxtmvc mvc
WHERE mvc.cdmagdis = 4264
AND mvc.dtjurcpt = TO_TIMESTAMP ('08/01/2010', 'dd/MM/yyyy')
AND mvc.cdtypmvt IN (100,102,110,111)
) mvc
WHERE STRUCTURE.nmc_fam_cdnmccmr = mvc.cdnmccmr(+)
GROUP BY nmc_ue_cdnmccmr,
nmc_ue_cdextnmccmr,
nmc_ue_lbnmccmr,
nmc_dpt_cdnmccmr,
nmc_dpt_cdextnmccmr,
nmc_gp_cdnmccmr,
nmc_gp_cdextnmccmr
ORDER BY nmc_ue_cdextnmccmr ASC
)
where ROWNUM <= 8)
Where RNUM > 0;


Merci d'avance!
Afficher la suite 

2 réponses

Meilleure réponse
Messages postés
3292
Date d'inscription
lundi 10 novembre 2008
Statut
Membre
Dernière intervention
2 mars 2016
286
24
Merci
Merci de ton aide!
J'ai trouvé le bug...
Qui est en fait le ';' à la fin qu'il ne faut pas mettre dans le code java, et comme un imbécile je l'avais laissé :)

Dire « Merci » 24

Heureux de vous avoir aidé ! Vous nous appréciez ? Donnez votre avis sur nous ! Evaluez CommentCaMarche

CCM 70422 internautes nous ont dit merci ce mois-ci

Merci pour l'information
OMG merci j'aurais jamais trouvé je savais pas qu'il ne fallait pas de ;
anadeveloppeur
Messages postés
156
Date d'inscription
samedi 10 septembre 2005
Statut
Membre
Dernière intervention
21 février 2019
8 -
Merci pour l'info, c'était très utile pour moi !
Messages postés
367
Date d'inscription
dimanche 12 octobre 2008
Statut
Membre
Dernière intervention
20 octobre 2013
25
0
Merci
Bonsoir,
Je ne réponds pas à ton post pour t'apporter la solution mais plus pour te donner une méthode pour trouver le bug :

Le bug est certainement dans tout ce qui concerne les conversions (par exemple : TO_TIMESTAMP('08/01/2010','dd/MM/yyyy') )

Alors voici mon conseil :
Etape 1 :
tu réécris chacun de tes ordres SELECT séparément mais en ne sélectionnant qu'une ou 2 infos. Ainsi tu vérifieras que les clauses WHERE sont correctes.
Etape 2 :
Une fois que tes ordres SELECT tournent correctement, tu les mettras en relation un à un ... avant d'avoir ajouté un nouveau SELECT à ta requête, tu auras ainsi validé une étape.

Au final, tu dois aboutir à la requête que tu nous a donnée mais corrigée ;-)

Bon courage.