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 :

[Oracle] - Requête avec paramètres


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2006
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 16
    Points : 8
    Points
    8
    Par défaut [Oracle] - Requête avec paramètres
    Bonjour,

    J'aimerais passer trois paramètres dans une requête oracle : l'un pour récupérer le jour, l'autre le mois et le dernier, l'année.

    Voici ma syntaxe :

    SELECT
    OPRID,
    QRYNAME,
    COUNT(QRYNAME) AS "c1",
    TO_NUMBER(TO_CHAR(DATETIME_ADDED, 'YYYY')) AS "c2",
    TO_CHAR(DATETIME_ADDED, 'MONTH') AS "c3",
    TO_NUMBER(TO_CHAR(DATETIME_ADDED, 'DD')) AS "c5"

    FROM
    PS_MI_TBL T1

    WHERE
    (DATETIME_ADDED >= TO_DATE('2004-04-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS'))
    AND
    (TO_NUMBER(TO_CHAR(DATETIME_ADDED, 'YYYY'))
    = TO_NUMBER(': annee'))

    AND
    (TO_CHAR(DATETIME_ADDED, 'MONTH') = ': mois')
    AND
    (TO_NUMBER(TO_CHAR(DATETIME_ADDED, 'DD'))
    = TO_NUMBER(': jour'))

    GROUP BY
    TO_NUMBER(TO_CHAR(DATETIME_ADDED, 'DD')),
    TO_NUMBER(TO_CHAR(DATETIME_ADDED, 'YYYY')),
    TO_NUMBER(TO_CHAR(DATETIME_ADDED, 'MM')),
    TO_CHAR(DATETIME_ADDED, 'MONTH'),
    OPRID,
    QRYNAME

    ORDER BY "c2", "c3", "c5"

    L'erreur annoncée est une erreur ORA 01722, soit un invalid number.

    Est-ce que quelqu'un pourrait m'aider à débugger cette query ?!

    Merci à tous.

    BOOtny

  2. #2
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Sans jeu d'essais, ça me paraît difficile...

    L'erreur intervient-elle systématiquement ?
    Si non, avec quelles paramètres ?

    Pourquoi tu fais des comparaisons comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (TO_NUMBER(TO_CHAR(DATETIME_ADDED, 'YYYY')) = TO_NUMBER(': annee')) 
    Sans les TO_NUMBER, ça ne fonctionnerait pas aussi bien ? Comme tu l'as fait pour le mois d'ailleurs.
    "Ce que l'on conçoit bien s'énonce clairement,
    Et les mots pour le dire arrivent aisément." Nicolas Boileau

    "Expliquer empêche de comprendre si cela dispense de chercher"

    Quiz Oracle : venez tester vos connaissances !

    La FAQ Oracle : 138 réponses à vos questions
    Aidez-nous à la compléter

  3. #3
    Futur Membre du Club
    Inscrit en
    Avril 2006
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 16
    Points : 8
    Points
    8
    Par défaut
    j'essaie progressivement :

    WHERE
    (DATETIME_ADDED >= TO_DATE('2004-04-01 00:00:00','YYYY-MM-DD HH24:MI:SS'))
    AND
    (TO_NUMBER(TO_CHAR(DATETIME_ADDED,'YYYY'))= TO_NUMBER('2005'))
    -- AND

    -- (TO_CHAR(DATETIME_ADDED,'MONTH')= TO_CHAR("MAI"))
    AND
    (TO_NUMBER(TO_CHAR(DATETIME_ADDED,'DD'))= TO_NUMBER('2'))


    Avec cette écriture, la query me ressort une liste convenable. Les TO_NUMBER passent dans ce cas de test. Par contre, le mois ne passe pas pour sa part, ni avec un TO_CHAR("..."), un TO_CHAR('..'), un '...' ni un "..." .

    Je cherche dans le formatage des chaînes de caractères. Mais si quelqu'un a une idée, je suis preneuse.

    Merci encore !

  4. #4
    Futur Membre du Club
    Inscrit en
    Avril 2006
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 16
    Points : 8
    Points
    8
    Par défaut
    C'est bon, j'ai trouvé la solution. L'astuce : la fonction TRIM pour obtenir des chaines de caractères de bonne longueur.

    SELECT
    COUNT(QRYNAME) AS "c1",
    TO_NUMBER(TO_CHAR(DATETIME_ADDED, 'YYYY')) AS "c2",
    TRIM(TO_CHAR(DATETIME_ADDED, 'MONTH')) AS "c3",
    TO_NUMBER(TO_CHAR(DATETIME_ADDED, 'MM')) AS "c4",
    TO_NUMBER(TO_CHAR(DATETIME_ADDED, 'DD')) AS "c5"

    FROM
    PS_N_MIQRY_TBL T1

    WHERE
    (DATETIME_ADDED >= TO_DATE('2004-04-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS'))
    AND
    (TO_NUMBER(TO_CHAR(DATETIME_ADDED, 'YYYY')) = TO_NUMBER(:annee))
    AND
    (TO_NUMBER(TO_CHAR(DATETIME_ADDED, 'DD')) = TO_NUMBER(:jour)) AND
    (TRIM(TO_CHAR(DATETIME_ADDED, 'MONTH')) = TO_CHAR(:mois))

    GROUP BY
    TO_NUMBER(TO_CHAR(DATETIME_ADDED, 'DD')),
    TO_NUMBER(TO_CHAR(DATETIME_ADDED, 'YYYY')),
    TO_CHAR(DATETIME_ADDED, 'MONTH'),
    OPRID,
    QRYNAME

    ORDER BY "c2", "c3", "c5"

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 772
    Points : 52 737
    Points
    52 737
    Billets dans le blog
    5
    Par défaut
    Ceci étant spécifique à Oracle, merci de poster dans le forum ORACLE !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

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

Discussions similaires

  1. Requête avec paramètres variables
    Par dahu17 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 30/05/2007, 10h38
  2. [Requête][03]Problème d'export d'une requête avec paramètre
    Par SLE dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 02/04/2007, 11h29
  3. Réponses: 5
    Dernier message: 06/01/2007, 04h48
  4. test d'une requête avec paramètre
    Par hervé14670 dans le forum Access
    Réponses: 1
    Dernier message: 12/01/2006, 22h45
  5. [Oracle] Requête avec colonne optionnelle
    Par Original Prankster dans le forum Langage SQL
    Réponses: 6
    Dernier message: 30/08/2005, 09h24

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