2012-09-03 3 views
1

Je wirte code dans java et la connexion de base de données avec Oracle. Je cours un certain script et obtiens cette erreur. Mon manuscrit travaille dans le crapaud mais ne fonctionne pas dans mon projetComment réparer cette erreur: SQL92 non supporté?

l'url incluent .

. 
. 
. 
. 
    DECODE 
       (REF.target_type_code, 
        '1', wf.workflow_name, 
        '20', reqtyp.request_type_name, 
        '6', prj1.project_name, 
        '59', trootinfo1.NAME, 
        '55', DECODE 
        (document.checked_out_by, 
         NULL, 
         REPLACE 
         (REPLACE 
          (REPLACE 
           (REPLACE 
            (REPLACE 
             (knta_i18n_resource.get 
              ('DMS_REFERENCE_DETAIL_CHECKED_OUT.TXT' 
              ), 
              knta_i18n_format_utils.format_date 
                 (document.checked_in_date, 
                 3 
                 ) 
             ) 
            ), 
            document.version_number 
           ) 
          ), 
          '{4}' 
         ) 
        ) 
       ) reference_detail, 

. 
. 
. 

.

try { 
    stmt = connection.createStatement(); 
    rset = stmt.executeQuery(url) ; 
} catch (Exception e) 

{ 
    error= e.getLocalizedMessage() ; 
    return 4; 
} 

cette erreur se produit en raison de {} parenthèses. Je l'ai testé. Lorsque je supprime des parenthèses, ne faites pas d'erreur. Mais j'ai besoin d'eux et comment puis-je résoudre ce problème?

+0

Montrez votre requête. Votre requête semble être incorrecte. – devang

+0

poseriez-vous votre requête –

+0

ma requête fonctionne dans crapaud mais pas dans mon netbeans –

Répondre

7

Tout tourne autour de '{' et '}'. Vous ne les utilisez pas. ojdbc ne l'analyse pas. utilisez un jeton différent au lieu d'eux.

+0

quel jeton devrais-je utiliser? Je viens de rencontrer le même problème lorsque j'appelle une procédure avec jdbc – Jaycee

+0

vous pouvez utiliser tout ce que vous voulez. F.E. utilisez _xx_, remplacez-le d'abord, puis re-remplacez-le pour inverser –

0

Il semble que plusieurs des appels REPLACE n'ont pas suffisamment d'arguments. En comptant à partir de la gauche, le premier REPLACE a deux arguments. Le second n'a qu'un argument. Le troisième a deux arguments. Le quatrième a seulement un argument. Le cinquième (dernier) a deux arguments. Dans Oracle, le REPLACE function requiert au moins deux arguments. Je ne suis pas en mesure de déterminer si c'est la cause de l'erreur car vous n'avez pas posté une déclaration complète, mais je m'attendrais certainement à ce que l'absence d'arguments appropriés à REPLACE soit un problème.

Partagez et appréciez.

2

Ceci est probablement dû à la syntaxe JDBC Escape (voir la section 13.4 de la spécification JDBC 4.1). Un pilote JDBC doit gérer les échappements entre { et } et traduire la fonction standard échappée, la jointure externe, etc. au format spécifique à la base de données. Pour autant que je sache, un pilote ne devrait analyser les échappements que s'ils se produisent dans le corps de l'instruction lui-même, et non quand il est dans le texte de l'instruction (comme c'est le cas dans votre exemple). Donc, pour moi, cela ressemble à un bug dans le traitement d'échappement JDBC de votre pilote.

Questions connexes