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

PL/SQL Oracle Discussion :

EXECUTE IMMEDIATE dans une procédure [12c]


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Conseil en assistance à maîtrise d'ouvrage
    Inscrit en
    Octobre 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Conseil en assistance à maîtrise d'ouvrage
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2019
    Messages : 2
    Par défaut EXECUTE IMMEDIATE dans une procédure
    Bonjour A tous ,
    je ne suis pas un expert sql je trouve des soucis a exécuter une procédure compilé sans erreurs

    mais lors de l’exécution un message bizarre apparaît
    ORA-01847: le jour du mois doit être compris entre 1 et le dernier jour du mois
    sachant que je n'utilise aucune date dans ma requête le soucie dans l'execution de EXECUTE IMMIDIATE

    voila le code de ma procédure
    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
    create or replace PROCEDURE      donnee_obl2 is    
    BEGIN
        DECLARE
            CURSOR c IS  select cli, tcli FROM bkcli;
     
        BEGIN --2
    --Traitement bkcli 
            FOR eng IN c LOOP --1
                DECLARE
                    xvaleur      NUMBER;
                    x_requete    VARCHAR2(2000);
                    wexist_cli   NUMBER;
                    wresultat    NUMBER;
                    wtcli varchar2(3);
                    wzone varchar2(100);
                    wcli varchar2(20);
     
                    CURSOR cvaldef_cli IS SELECT zone zone1, iden FROM valdef_bkcli WHERE TRIM(tcli) = TRIM(eng.tcli) AND obl = 'O' AND action = 'T' ORDER BY zone;
     
                BEGIN --3
     
     
                    FOR eng1 IN cvaldef_cli LOOP --2
                    wzone:=eng1.zone1;
                    wcli:=eng.cli ;
           x_requete:='select count(*) from bkcli where cli = '''|| wcli ||''' and (' || trim(wzone)|| ' is null or  ' || trim(wzone) || ' = '' '')';
           EXECUTE IMMEDIATE x_requete into wresultat ;
           commit; 
           INSERT INTO requete VALUES ( wresultat );
            COMMIT;
    IF wresultat = 1 THEN
    SELECT COUNT(*) INTO wexist_cli FROM reporting_valdef WHERE cli = ENG.cli;
    IF wexist_cli = 0 THEN
    INSERT INTO reporting_valdef VALUES (ENG.cli,ENG1.zone1,1 );
    COMMIT;
    ELSE
    UPDATE reporting_valdef  SET non_saisie = non_saisie||';'||eng1.zone1,nbre_non = nbre_non + 1;
    COMMIT;END IF;
    END IF;
    END LOOP; --2
    END;--3
    end loop;
    ---update *valdef_bkcli set valeur = null ; commit ; END LOOP;--1
    END;--2
    ---------------
     
    end ;

    l'erreur apparait sur la ligne execute immidiate

    merci pour votre aide ,

    cdt,
    mrabet

  2. #2
    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
    Tracer la requête qui est exécutée dans l'EXECUTE IMMEDIATE à l'aide de l'instruction suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    [..]
    x_requete:='select count(*) from bkcli where cli = '''|| wcli ||''' and (' || trim(wzone)|| ' is null or  ' || trim(wzone) || ' = '' '')';
    dbms_output.put_line(x_requete);
    EXECUTE IMMEDIATE x_requete into wresultat ;
    commit;
    [..]
    Puis exécuter la requête tracer pour voir ou se situe l'erreur.
    De quel type est la colonne WZONE ?
    Etes-vous sûr que l'erreur intervient lors de l'EXECUTE IMMEDIATE et non pas lors de l'INSERT ?
    Si c'est l'INSERT, n'y a t-il pas un champs date (sans valeur par défaut) dans cette table qui serait absent de votre instruction de création ?

    Attention, pensez à activer les traces PL/SQL si elles sont désactivées :
    PS : Eviter les COMMIT à tout bout de champs pour préserver l'intégrité de vos données en les traitant dans une même transaction (Un seul COMMIT ou ROLLBACK à la fin, et encore.. c'est bien souvent à l'appelant de valider/invalider la transaction )
    PS2 : Les COMMIT après les SELECT sont plus qu'inutiles.

  3. #3
    Membre Expert
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    2 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 2 005
    Par défaut
    Que donnent les commandes suivantes : on cherche le champ DATE posant problème.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    desc bkcli
    desc requete
    desc reporting_valdef

  4. #4
    Candidat au Club
    Homme Profil pro
    Conseil en assistance à maîtrise d'ouvrage
    Inscrit en
    Octobre 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Conseil en assistance à maîtrise d'ouvrage
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2019
    Messages : 2
    Par défaut champ date qui pose probléme
    merci en effet c'etait un champ date qui pose le problème
    merci pour vous

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

Discussions similaires

  1. passage d'un nom de table dans une procédure stockée
    Par thierry V dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 26/07/2010, 16h48
  2. Executer une requête dans une procédure
    Par Sieldev dans le forum SQL
    Réponses: 8
    Dernier message: 31/10/2008, 11h51
  3. Réponses: 3
    Dernier message: 29/08/2007, 20h43
  4. Transformation de date dans une procédure stockée
    Par bd0606 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 27/10/2003, 11h31
  5. Fin de programme dans une procédure
    Par Sinclair dans le forum Langage
    Réponses: 13
    Dernier message: 29/11/2002, 22h30

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