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

SQL Oracle Discussion :

Utilisation d'un like dans une procédure


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Mars 2011
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 10
    Par défaut Utilisation d'un like dans une procédure
    Bonjour à tous,

    Sous Oracle j'ai créé la procédure ci-dessous :

    mais la partie LIKE est KO.

    Seriez vous m'aider?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    delete pmvtsto 
    where 1=1
    and numfiche is null
    and pmvtsto.rdate >= '01/12/2017'
    and pmvtsto.rdate <= '01/02/2018'
    --and pmvtsto.rdate >= sysdate-2
    and pmvtsto.arcode = ligneRec.arcode
    and libmvt like '%lignerec.focode%'
    ;
    End loop;
    Commit;
    End
    Merci!!

  2. #2
    Membre habitué
    Inscrit en
    Mars 2011
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 10
    Par défaut
    je ne vous ai pas mis toute la procédure.
    c'est fait.

    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
    create or replace procedure VILO_SUPP_MVT_PREVISION_CONSO 
    is
    begin
    for ligneRec in 
    ( 
            select 
             distinct(pnomenof.arcode)
            ,focode 
            from pordrfab
            inner join pnomenof on pnomenof.OBCLEUNIK = pordrfab.OBCLEUNIK
            where 1=1
            and datemodif >= '01/12/2017'
            and datemodif <= '01/02/2018'
            and focode = '474739'
            and OBETAT = 6
            --and datemodif >= trunc(sysdate) -1
    )
    loop
    delete pmvtsto 
    where 1=1
    and numfiche is null
    and pmvtsto.rdate >= '01/12/2017'
    and pmvtsto.rdate <= '01/02/2018'
    --and pmvtsto.rdate >= sysdate-2
    and pmvtsto.arcode = ligneRec.arcode
    and libmvt like '%lignerec.focode%'
    ;
    End loop;
    Commit;
    End VILO_SUPP_MVT_PREVISION_CONSO;
    j'ai fait des recherches mais rien trouvé pour le moment....
    la procédure fonctionne sans le LIKE...

    Merci!

  3. #3
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 428
    Par défaut
    Bonjour,
    Que signifie "la partie LIKE est KO" ?
    Quel est le problème exactement ?
    "La procédure fonctionne sans le LIKE, mais pas avec." Mais encore ? Elle ne supprime rien, pas les bonnes lignes ?

    Il nous faudrait un jeu d'essai, et une description précise du problème.

    Tatayo.

  4. #4
    Membre habitué
    Inscrit en
    Mars 2011
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 10
    Par défaut
    Merci tatayo

    Je n'ai pas d'erreur au moment de la compilation. quand je l’exécute elle ne me supprime pas ma ligne effectivement. (Proc en test sur base de test)

    la procédure s’exécute correctement sans erreur.

    j'ai testé ma procédure en supprimant le "like" en en faisant un test avec un update. et ça marche.

    Merci

  5. #5
    Membre Expert
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2012
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2012
    Messages : 652
    Par défaut
    Ajouter des traces à l'aide de DBMS_OUTPUT.PUT_LINE pour savoir si vos instructions impactent des lignes
    Par exemple après le delete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    dbms_output.put_line('Nb lignes : '||SQL%ROWCOUNT);
    Pour voir les traces, il faut qu'elles soient activées :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    set serveroutput on 
    OU
    set serveroutput on size 1000000

    PS : Un COMMIT dans la procédure n'est pas nécessairement une bonne pratique

  6. #6
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 953
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 953
    Par défaut
    Vous traitez lignerec.focode comme une chaine de caractère, essayez comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    and libmvt like '%'||lignerec.focode||'%'
    PS : utilisez TO_DATE pour éviter une conversion implicite qui se base sur les paramètres de votre session,
    Et attention aux heures, si vous voulez les données de la journée du 01/02, c'est plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    and datemodif >= to_date('01/12/2017','dd/mm/yyyy')
    and datemodif < to_date('01/02/2018','dd/mm/yyyy') + 1

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 28/05/2011, 15h47
  2. Utilisation de try catch dans une procédure de backup de database
    Par megtrinity dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 05/11/2009, 14h53
  3. Utilisation du mot LIKE dans une requete
    Par Astro8899 dans le forum VB.NET
    Réponses: 6
    Dernier message: 27/05/2009, 10h20
  4. [PROC] utiliser des données selectionnées dans une procédure.
    Par ellix86 dans le forum Développement
    Réponses: 5
    Dernier message: 17/04/2009, 13h08
  5. Problème avec un LIKE dans une procédure stockée
    Par Oluha dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 22/12/2004, 14h38

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