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

Oracle Discussion :

Curseur, fetch + conditions


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2013
    Messages : 7
    Par défaut Curseur, fetch + conditions
    Bonjour,
    je débute en PL/SQL donc j'aimerais votre aide
    Je voudrais faire une vérification qui controle des champs avant l'insertion

    Mes conditions ne sont pas reconnu.
    Je vous joins mon code:
    les erreurs sont au niveau du premier if et de ecpxpay qui n'est pas reconnu mais c'est encore autre chose.
    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
    create or replace
    PROCEDURE DL_CK_ADRESSE  is
    adr1 varchar2(35);
    reg varchar2(35);
    cod varchar2(35);
    vil varchar2(35);
    pays varchar2(30);
    cursor verif is select ad1xcl2, copxcl2, regxcl2, vilxcl2 from cl2xres, payxres where cl2xres.payxcl2 = payxres.codxpay
    and not regexp_like(regxcl2,(erexpay)) or not regexp_like(copxcl2,(ecpxpay));
     
    BEGIN
     
    /*verification de l'adresse, de la région, du pays et du code postal*/
      open verif;
        loop
         fetch verif into adr1, cod, reg, vil;       
         if adr1 is null then  /*champs obligatoire*/
            dbms_output.put_line( adr1|| cod|| reg|| vil + ':Adresse manquante' );
         elsif vil is null then /*champs obligatoire*/  
            dbms_output.put_line( adr1|| cod|| reg|| vil + ':Ville manquante' );
         elsif (cod <> regexp_like(cod,(ecpxpay))) then /*vérification du code postal obligatoire dans certains pays*/
          dbms_output.put_line( adr1|| cod|| reg|| vil + ':erreur code postal' );
         elsif(reg <> regexp_like(reg,(erexpay))) then /*vérification de la région obligatoire dans certains pays*/
            dbms_output.put_line( adr1|| cod|| reg|| vil + ':erreur code region' );
         end if;
         Exit When verif%NOTFOUND;
        end loop;
      close verif;
    END DL_CK_ADRESSE;
    Merci

  2. #2
    Membre Expert Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Par défaut
    Salut,

    regexp_like renvoit un booléen, il faut donc remplacer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    elsif (cod <> regexp_like(cod,(ecpxpay)))
    Par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    elseif (NOT regexp_like(cod,(ecpxpay)))
    (et pareil pour les autres regexp_like)

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2013
    Messages : 7
    Par défaut
    merci de ta réponse, c'est vrai, en plus je l'ai fait dans le curseur ^^.
    Mais quand j'y repense y a peut etre moyen de faire autrement pour les conditions de comparaison au expr reg dans les IF,

    Mais ça ne me dis toujours pas pourquoi il ne veut pas de mes if

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2013
    Messages : 7
    Par défaut
    j'ai changer un peu le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    fetch verif into adr1, cod, reg, vil;       
         if adr1 is null then  /*champs obligatoire*/
            Dbms_Output.Put_Line( Adr1|| Cod|| Reg|| Vil + ':Adresse manquante' );
         elsif vil is null then /*champs obligatoire*/  
            Dbms_Output.Put_Line( Adr1|| Cod|| Reg|| Vil + ':Ville manquante' );
         elsif  not regexp_like(cod, 'ecpxpay') then /*vérification du code postal obligatoire dans certains pays*/
            Dbms_Output.Put_Line( Adr1|| Cod|| Reg|| Vil + ':erreur code postal' );
         elsif  not regexp_like(reg, 'erexpay') then /*vérification de la région obligatoire dans certains pays*/
            dbms_output.put_line( adr1|| cod|| reg|| vil + ':erreur code region' );
         end if;
         Exit When verif%NOTFOUND;
    il me met une erreur de conversion mais ne bloque pas , mais il execute pour une fois correctement la procedure mais ne renvoi rien.

  5. #5
    Membre Expert Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Par défaut
    Je pense que tu as une grosse couille dans ton SELECT : attention à la priorité AND et OR (ici je pense que t'es assez proche du produit cartésien)

    Ensuite, pour que le dbms_output te crache bien les lignes, fais quequel part un dbms_output.enable

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2013
    Messages : 7
    Par défaut
    J'ai modifié quelque peu la requete mais il me sort toujours une erreur de parenthese sur mon expr reg mais je la vois pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Select Ad1xcl2, Copxcl2, Regxcl2, Vilxcl2, Ecpxpay, Erexpay From Cl2xres, Payxres Where Cl2xres.Payxcl2 = Payxres.Codxpay
    and (not regexp_like(regxcl2,(erexpay)) or not regexp_like(copxcl2,(ecpxpay)) or (Ad1xcl2 || Vilxcl2 is null)) ;

Discussions similaires

  1. Créer un curseur sous condition
    Par kalurar dans le forum PL/SQL
    Réponses: 5
    Dernier message: 06/07/2011, 13h48
  2. Réponses: 3
    Dernier message: 30/10/2007, 08h20
  3. Réponses: 2
    Dernier message: 04/02/2007, 09h55
  4. Réponses: 5
    Dernier message: 23/02/2005, 09h43
  5. Le rollback explose au moment du FETCH d'un Curseur
    Par Krashtest dans le forum Administration
    Réponses: 10
    Dernier message: 18/08/2003, 09h46

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