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 :

Problème variable numérique dans requête


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2011
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2011
    Messages : 38
    Par défaut Problème variable numérique dans requête
    Bonjour à tous,
    j'ai un léger soucis avec 2 petites procédures PL/SQL.
    En fait, ma première procédure, va chercher une date dans une table > créer une table temporaire > stocke la date dans cette table > et update la date dans la table principale :
    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
    CREATE OR REPLACE PROCEDURE SCHEMA.P_DATE_CHECKPOINT
    IS
        s#QUERY_SEL_DATE DATE;
        s#DATE_TMP DATE;    
    BEGIN
        s#DATE_TMP:= '01/01/1900';
        s#QUERY_SEL_DATE:=
                           'SELECT CP.LAST_RUN_DATE
                            FROM CHECK_POINT CP
                            WHERE CP.CP_ID =  5';
     
        EXECUTE IMMEDIATE 'CREATE TABLE CHECK_POINT_TMP (LAST_RUN_DATE DATE)';
        EXECUTE IMMEDIATE 'INSERT INTO CHECK_POINT_TMP (LAST_RUN_DATE)
                           VALUES ('|| s#QUERY_SEL_DATE ||')';
        EXECUTE IMMEDIATE 'UPDATE CHECK_POINT CP
                           SET LAST_RUN_DATE = '|| s#DATE_TMP ||
                           'WHERE CP.CP_ID = 5';
    END;
    /
    Et ma 2ème procédure va récupère la date stockée dans la table temporaire > la met à la place de la date de la table principale > et supprime la table temporaire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    CREATE OR REPLACE PROCEDURE SCHEMA.P_CHECKPOINT_INITIAL_DATE
    IS
        s#QUERY_SEL_DATE_TMP DATE;
    BEGIN
        s#QUERY_SEL_DATE_TMP:=
                           'SELECT CPT.LAST_RUN_DATE
                                FROM CHECK_POINT_TMP CPT';
        EXECUTE IMMEDIATE 'UPDATE CHECK_POINT CP
                           SET LAST_RUN_DATE = '|| s#QUERY_SEL_DATE_TMP
                           || 'WHERE CP.CP_ID = 5';
        EXECUTE IMMEDIATE 'DROP TABLE CHECK_POINT_TMP';
    END;
    /
    Lorsque je créer ces proc, pas de soucis, mais lorsque j'essaie de les executer, j'ai cette erreur (la même pour les 2), voici celle de la première :

    ORA-01858: Caractère non numérique trouvé à la place d'un caractère numérique
    ORA-06512: à "SCHEMA.P_DATE_CHECKPOINT", ligne 7
    ORA-06512: à ligne 1


    Quelqu'un peut-il m'aider? Je ne sais pas si j'ai vraiment fait une erreur ou bien si c'est une histoire de quote mal placée ou manquante...

  2. #2
    Membre Expert Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet / Urbaniste SI
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Par défaut
    Pas de sql dynamique pour du DML !!!
    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
     
     
    CREATE OR REPLACE PROCEDURE SCHEMA.P_CHECKPOINT_INITIAL_DATE
    IS   
     s#QUERY_SEL_DATE_TMP DATE;
    BEGIN    
    SELECT CPT.LAST_RUN_DATE    
     INTO  s#QUERY_SEL_DATE_TMP DATE
    FROM CHECK_POINT_TMP CPT;
    UPDATE CHECK_POINT CP
    SET LAST_RUN_DATE = s#QUERY_SEL_DATE_TMP
    WHERE CP.CP_ID = 5;
    EXECUTE IMMEDIATE 'DROP TABLE CHECK_POINT_TMP';
    END;

  3. #3
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2011
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2011
    Messages : 38
    Par défaut
    Merci pour ta réponse rapide.
    Malheureusement, je n'ai toujours pas réussi , désolé je débute...
    Ma 1ère proc est maintenant comme cela :
    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
    CREATE OR REPLACE PROCEDURE SCHEMA.P_DATE_CHECKPOINT
    IS
        s#QUERY_SEL_DATE DATE;
        s#DATE_TMP DATE;    
    BEGIN
        s#DATE_TMP:= '01/01/1900';
        SELECT CP.LAST_RUN_DATE
        INTO s#QUERY_SEL_DATE DATE
        FROM CHECK_POINT CP
        WHERE CP.CP_ID = 5;
     
        CREATE TABLE CHECK_POINT_TMP (LAST_RUN_DATE DATE);
        INSERT INTO CHECK_POINT_TMP (LAST_RUN_DATE)
        VALUES (s#QUERY_SEL_DATE);
        UPDATE CHECK_POINT CP
        SET LAST_RUN_DATE = s#DATE_TMP
        WHERE CP.CP_ID = 5;
    END;
    /
    Et ma 2ème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    CREATE OR REPLACE PROCEDURE APOLLO_REP_FR.P_CHECKPOINT_INITIAL_DATE_test
    IS   
        s#QUERY_SEL_DATE_TMP DATE;
    BEGIN    
        SELECT CPT.LAST_RUN_DATE    
        INTO  s#QUERY_SEL_DATE_TMP DATE
        FROM CHECK_POINT_TMP CPT;
        UPDATE CHECK_POINT CP
        SET LAST_RUN_DATE = s#QUERY_SEL_DATE_TMP
        WHERE CP.CP_ID = 5;
        EXECUTE IMMEDIATE 'DROP TABLE CHECK_POINT_TMP';
    END;
    Mais lorsque je tente de créer la 1ere Proc, j'ai ce message d'erreur de compil :
    ORA-0023: mot-clé FROM absent à l'emplacement prévu

    Euh...

  4. #4
    Membre Expert Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet / Urbaniste SI
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Par défaut
    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
    CREATE OR REPLACE PROCEDURE SCHEMA.P_DATE_CHECKPOINT
    IS
    s#QUERY_SEL_DATE   DATE;
    s#DATE_TMP         DATE;
    BEGIN
    s#DATE_TMP := TO_DATE ('01/01/1900', 'DD/MM/YYYY');
    SELECT CP.LAST_RUN_DATE
      INTO s#QUERY_SEL_DATE  /* DATE */
         FROM CHECK_POINT CP
        WHERE CP.CP_ID = 5;
    EXECUTE IMMEDIATE 'CREATE TABLE CHECK_POINT_TMP (LAST_RUN_DATE DATE)';
    INSERT INTO CHECK_POINT_TMP (LAST_RUN_DATE)
         VALUES (s#QUERY_SEL_DATE);
    UPDATE CHECK_POINT CP
       SET LAST_RUN_DATE = s#DATE_TMP
     WHERE CP.CP_ID = 5;
    END;

  5. #5
    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
    Quel est l'objectif car la méthode n'est pas bonne.
    Il ne faut pas créer une table à la volée puis la drop, la table CHECK_POINT_TEMP doit être créer en dur.

    Ele peut être créée comme table temporaire si besoin, à savoir les données ne seront visibles que par la session mais attention à ce que les 2 méthodes soient bien lancée par la même session donc pas de déconnection.
    En tout cas seule les données sont temporaires pas la table elle même.

    Oracle n'est pas Sqlserver ou mysql.

  6. #6
    Membre Expert Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet / Urbaniste SI
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Par défaut
    Ok , OK !!!!
    Mais visiblement,pour l'instant, on en est aux premiers apprentissages du PL/SQL !

  7. #7
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 454
    Par défaut
    Citation Envoyé par skuatamad Voir le message
    Oracle n'est pas Sqlserver ou mysql.
    Votre conseil est juste et applicable à tous les SGBD !

Discussions similaires

  1. [ADO] Problème avec LIKE dans requête paramétrée
    Par _skip dans le forum Connexion aux bases de données
    Réponses: 7
    Dernier message: 04/11/2007, 20h53
  2. Insérez variable PHP dans requête Mysql
    Par jeremie74 dans le forum Requêtes
    Réponses: 11
    Dernier message: 22/08/2006, 18h21
  3. [SQL] Problème résultat checkbox dans requête SQL
    Par Skeud007 dans le forum PHP & Base de données
    Réponses: 20
    Dernier message: 02/07/2006, 15h02
  4. Problème avec date dans requête
    Par alain94 dans le forum Access
    Réponses: 2
    Dernier message: 22/05/2006, 07h49
  5. Problème de date dans requête de màj imbriquée
    Par VirginieGE dans le forum Langage SQL
    Réponses: 11
    Dernier message: 20/07/2004, 15h34

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