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

Langage SQL Discussion :

preparedstatement pl/sql paramètres


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    358
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 358
    Points : 117
    Points
    117
    Par défaut preparedstatement pl/sql paramètres
    Bonjour,
    J'ai un fichier .sql où est stocké mon code pl/sql.

    A partir de java, je l'exécute, et ça fonctionne.

    Or en voulant passer des paramètres, la procédure pl/sql fonctionne mais sans résultat, comme s'il ne prenait pas en compte les paramètres passés.

    voici mon code pl/sql :

    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
    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
    
    DECLARE
      opeId operation.ope_id%TYPE;
      sessionId INT;
      typeExtraction VARCHAR(10);
      suiviBatch INT;
      dateDebut VARCHAR(10);
      dateFin VARCHAR(10);
      CURSOR cursorOperationEtape IS SELECT
          OPERATION.OPE_ID
         FROM
         OPERATION INNER JOIN TYPE_OPERATION
          ON OPERATION.TYP_TOP_ID = TYPE_OPERATION.TOP_ID
         LEFT OUTER JOIN APUREMENT_INCIDENT_CAISSE
          ON OPERATION.OPE_ID = APUREMENT_INCIDENT_CAISSE.OPE_ID
         LEFT OUTER JOIN APUREMENT_INCIDENT_ATELIER
          ON OPERATION.OPE_ID = APUREMENT_INCIDENT_ATELIER.OPE_ID
         LEFT OUTER JOIN incident_atelier_reception
          ON APUREMENT_INCIDENT_ATELIER.OPE_ID_IAR = incident_atelier_reception.OPE_ID
         LEFT OUTER JOIN incident_caisse_reception
          ON APUREMENT_INCIDENT_CAISSE.OPE_ID_ICR = incident_caisse_reception.OPE_ID
        WHERE
         ope_date_operation between dateDebut and dateFin
         AND type_operation.TOP_STATUT_FINAL = 'Y'
         AND (OPERATION.ope_num_operation <> OPERATION.ope_code_regroupement
          OR ope_statut IN ('Annulé','Supprimé'))
         AND (TOP_IDENTIFIANT not in ('INCCAEXD','INCCAEXE','INCATBED','INCATBEE'))
         AND ((incident_caisse_reception.ICR_MT_RESTANT_APURER IS NULL AND incident_atelier_reception.IAR_MT_RESTANT_APURER IS NULL)
          OR incident_caisse_reception.ICR_MT_RESTANT_APURER = 0
          OR incident_atelier_reception.IAR_MT_RESTANT_APURER = 0
         );
      CURSOR cursorListePere(fils number) is SELECT
        ope_id, ope_num_operation
        FROM operation
        START WITH ope_id=fils
        CONNECT BY PRIOR ope_id_precedente = ope_id;
    BEGIN
      sessionId := ?;
      typeExtraction := ?;
      suiviBatch := ?;
      dateDebut := ?;
      dateFin := ?;
      FOR vOperationAEtape IN cursorOperationEtape LOOP
         FOR pereId IN cursorListePere(vOperationAEtape.ope_id) LOOP
         	INSERT INTO EXTR_ID_ARC_PUR (EXTR_ID,OPE_ID,EXT_TYPE_EXTRACTION,ID_FONC,SES_ID,SVBATCH_ID) values (S_EXTR_ID_ARC_PUR.NEXTVAL,pereId.OPE_ID, typeExtraction, pereId.OPE_NUM_OPERATION, sessionId,suiviBatch);
         END LOOP;
      END LOOP;
      INSERT INTO EXTR_ID_ARC_PUR (EXTR_ID,OPE_ID,EXT_TYPE_EXTRACTION,ID_FONC,SES_ID,SVBATCH_ID)
      (
        SELECT S_EXTR_ID_ARC_PUR.NEXTVAL,OPE_ID, typeExtraction, OPE_NUM_OPERATION, sessionId,suiviBatch
        FROM operation
          INNER JOIN type_operation
          ON operation.typ_top_id = type_operation.top_id
        WHERE
          ope_date_operation between dateDebut and dateFin
          AND type_operation.TOP_STATUT_FINAL = 'Y'
          AND ope_num_operation = ope_code_regroupement
          AND ope_statut NOT IN ('Annulé','Supprimé')
      );
      DELETE EXTR_ID_ARC_PUR EXTR_1
      WHERE SES_ID = sessionId AND ROWID > (
        SELECT MIN(ROWID)
        FROM EXTR_ID_ARC_PUR EXTR_2
        WHERE EXTR_2.OPE_ID = EXTR_1.OPE_ID AND
              EXTR_2.ID_FONC = EXTR_1.ID_FONC AND
              EXTR_2.SES_ID = EXTR_2.SES_ID
      );
    END;
    Code Java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    String requetePLSQL = chargerSqlFichier(getRequest("requete.recherche.OPERATION.file"));
    		PreparedStatement preparedStatement =queryRunner.getDataSource().getConnection().prepareStatement(requetePLSQL.replaceAll("\\r", ""));
    preparedStatement.setBigDecimal(1, sessionId);
    preparedStatement.setString(2, typeExtraction);
    preparedStatement.setBigDecimal(3, suiviBatch);
    preparedStatement.setString(4, dateDebutPlage);
    preparedStatement.setString(5, dateFinPlage);
    //ici j'ai bien vérifié avec les logs que les paramètres sont bien renseignés.
    preparedStatement.execute()
    Et là, il n'exécute rien. Alors que si je met en DUR les variables en PL/SQL comme ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    BEGIN
      sessionId := 5022;
      typeExtraction := 'Purge';
      suiviBatch := 53651;
      dateDebut := '01/04/2009';
      dateFin := '30/07/2009';
    ça fonctionne, j'ai l'impression qu'il ne prend pas en compte les paramètres et donc mes requetes ne sont pas exécutés.

    avez-vous une idée ?

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 394
    Points
    18 394
    Par défaut
    Ça pourrait être lié au typage des dates que vous avez mis en varchar2.

    Pour savoir exactement ce qui se passe, il faut activer la trace étendue et l'analyser.

    Sinon, toujours fâché avec le forum Oracle ?

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    358
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 358
    Points : 117
    Points
    117
    Par défaut
    ça fonctionne !
    j'ai mis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
      sessionId INT :=? ;
      typeExtraction VARCHAR(10) := ?;
      suiviBatch INT := ?;
      dateDebut VARCHAR(10) := ?;
      dateFin VARCHAR(10) := ?;
    au début du DECLARE et non au début du BEGIN !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Requête Sql Paramétrée [ Débutant ]
    Par bon4000 dans le forum Windows Forms
    Réponses: 5
    Dernier message: 17/09/2007, 17h30
  2. Réponses: 4
    Dernier message: 17/02/2007, 16h11
  3. [Oracle 10.2] PL/SQL Paramètre Curseur
    Par pegase06 dans le forum PL/SQL
    Réponses: 13
    Dernier message: 01/02/2007, 20h58
  4. [VBA][SQL] Paramètre manquant (ce qui est faux)
    Par CinErarY dans le forum Access
    Réponses: 4
    Dernier message: 24/12/2006, 18h10
  5. [Débutant] Dbexpress / Trace SQL / Paramêtres absents
    Par pitango dans le forum Bases de données
    Réponses: 5
    Dernier message: 03/06/2006, 00h22

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