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 :

Passage d'un paramètre décimal à une procédure


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 560
    Par défaut Passage d'un paramètre décimal à une procédure
    Bonjour,

    Je cherche à passer à une procédure stockée ORACLE des arguments de types décimaux.

    Via un client TOAD l'appel de la procédure est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    call test_proc(to_number('1,2'));
    Les arguments de la procédure stockée sont : IN NUMBER.

    Cet appel ne fonctionne pas : ORA-00913: too many values.

    Merci pour votre retour.

  2. #2
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Peut être que vous travaillez avec le point décimal et non pas la virgule décimale, vérifiez votre paramètrage NLS.... En plus c'est quoi le to_number('1,2') ..., vous pouvez passer directement une constante numérique à votre procédure; nul besoin de passer par tous ces conversions.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 560
    Par défaut
    Lorsque je fais un : select * from nls_database_parameters

    J'obtiens : NLS_LANGUAGE = AMERICAN.

    Les arguments de la procédure :

    CREATE OR REPLACE PROCEDURE INTEGRATION_TARIF_BRN(
    p_client IN VARCHAR2,
    p_num_engagement IN VARCHAR2,
    p_intervention IN NUMBER,
    p_montant IN NUMBER,
    p_date_validite IN VARCHAR2,
    p_annee IN VARCHAR2,
    p_composant IN NUMBER,
    p_lib_intervention IN VARCHAR2
    )

    L'appel à la procédure qui renvoie une erreur sur le quatrième argument :

    call integration_tarif_brn('50188','50188ST01',8,5.2,to_date('01/01/2011','dd/mm/yyyy'),'2011',2,'Mouvements de titres');

    Le problème vient du nombre décimal d'où l'idée de faire une conversion avec to_number()....

  4. #4
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Regardez les paramètres NLS de votre session
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT * FROM NLS_SESSION_PARAMETERS

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 560
    Par défaut
    OK mais quel paramètre regarder dans cette liste ?

    J'ai par exemple un NLS_NUMERIC_CHARACTERS qui vaut ',' ?

    Merci par avance pour tout complément d'information.

  6. #6
    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
    Je ne vois rien de faux sur le quatrième argument, mais en tout cas sur le cinquième oui, vous envoyez une date alors qu'une chaîne de caractères est attendue.

    Essayez celà :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    call integration_tarif_brn('50188', '50188ST01', 8, 5.2, '01/01/2011', '2011', 2, 'Mouvements de titres');

  7. #7
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Alors, ça devrait aller
    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
     
    mni@DIANA> select * from nls_session_parameters
      2  /
     
    PARAMETER                      VALUE
    ------------------------------ ----------------------------------------
    NLS_LANGUAGE                   FRENCH
    NLS_TERRITORY                  FRANCE
    NLS_CURRENCY                   Ç
    NLS_ISO_CURRENCY               FRANCE
    NLS_NUMERIC_CHARACTERS         ,
    NLS_CALENDAR                   GREGORIAN
    NLS_DATE_FORMAT                DD/MM/RR
    NLS_DATE_LANGUAGE              FRENCH
    NLS_SORT                       FRENCH
    NLS_TIME_FORMAT                HH24:MI:SSXFF
    NLS_TIMESTAMP_FORMAT           DD/MM/RR HH24:MI:SSXFF
    NLS_TIME_TZ_FORMAT             HH24:MI:SSXFF TZR
    NLS_TIMESTAMP_TZ_FORMAT        DD/MM/RR HH24:MI:SSXFF TZR
    NLS_DUAL_CURRENCY              Ç
    NLS_COMP                       BINARY
    NLS_LENGTH_SEMANTICS           BYTE
    NLS_NCHAR_CONV_EXCP            FALSE
     
    17 ligne(s) sélectionnée(s).
     
    mni@DIANA> create or replace procedure mni_test (
      2    p1       In number,
      3    p2       In varchar2
      4  ) IS
      5  Begin
      6    Null;
      7  End;
      8  /
     
    Procédure créée.
     
    mni@DIANA> show errors
    Pas d'erreur.
    mni@DIANA> exec mni_test(1,2,'test')
    BEGIN mni_test(1,2,'test'); END;
     
          *
    ERREUR à la ligne 1 :
    ORA-06550: Ligne 1, colonne 7 :
    PLS-00306: numéro ou types d'arguments erronés dans appel à 'MNI_TEST'
    ORA-06550: Ligne 1, colonne 7 :
    PL/SQL: Statement ignored
     
     
    mni@DIANA> exec mni_test(p1 => 1,2, p2=> 'test')
    BEGIN mni_test(p1 => 1,2, p2=> 'test'); END;
     
                           *
    ERREUR à la ligne 1 :
    ORA-06550: Ligne 1, colonne 24 :
    PLS-00312: association de paramèt. de pondération ne doit pas suivre une assoc nommée
    ORA-06550: Ligne 1, colonne 7 :
    PL/SQL: Statement ignored
     
     
    mni@DIANA> exec mni_test('1,2','test')
     
    Procédure PL/SQL terminée avec succÞs.
     
    mni@DIANA> exec mni_test(to_number('1,2'),'test')
     
    Procédure PL/SQL terminée avec succès.
     
     
    mni@DIANA>

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 22/05/2014, 11h45
  2. Passage d un nom de table en paramètre d'une procédure stockée
    Par Cedric33 dans le forum Développement
    Réponses: 22
    Dernier message: 10/02/2009, 16h12
  3. [SQL Server] Passage d'un paramètre dans une procédure
    Par navis84 dans le forum Bases de données
    Réponses: 3
    Dernier message: 14/01/2005, 13h19
  4. Passage d'un paramètre d'une fenêtre à une autre ?
    Par almisuifre dans le forum C++Builder
    Réponses: 10
    Dernier message: 06/12/2004, 22h42
  5. Un fichier .bmp comme paramètre d'une Procédure stockée
    Par FONKOU dans le forum Bases de données
    Réponses: 2
    Dernier message: 28/10/2004, 17h56

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