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 :

erreur ORA-01722 dans une procédure


Sujet :

PL/SQL Oracle

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 298
    Points : 85
    Points
    85
    Par défaut erreur ORA-01722 dans une procédure
    dans ma procédure jai l'erreur suivante :

    ORA-01722


    DECLARE
    *
    ERROR at line 1:
    ORA-01722: invalid number
    ORA-06512: at "SYSADM.COPYRPLANWORKFROMPRODVERSION", line 20
    ORA-06512: at line 20
    alors que dans le script SQL la lignes est comme suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT  MAX(VSCODE) into tmcode_vsCode FROM RATEPLAN_VERSION WHERE TMCODE = 201  AND STATUS = 'P';
    avec les deux trucs déclarés:

    tmcode_vsCode RATEPLAN_VERSION.VSCODE%type;

    et

    tmcode_toUpdate IN INTEGER


    je comprends pas

  2. #2
    Membre confirmé Avatar de NGasparotto
    Inscrit en
    Janvier 2007
    Messages
    421
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 421
    Points : 603
    Points
    603
    Par défaut
    TMCODE datatype ?
    C'est possible de nous donner un peu plus de ton code ?

    Nicolas.

  3. #3
    Expert éminent sénior 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
    Points : 11 252
    Points
    11 252
    Par défaut
    On va parier que TMCODE est de type varchar2 ou similaire ce qui provoque une coercition de type to_number(TMCODE) = 201 (constante de type entier) et dans la table (vue) en question il y a des valeurs non-numériques dans la zone TMCODE.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 298
    Points : 85
    Points
    85
    Par défaut TMCODE bien INTEGER
    le tmcode est bien un INTEGER dans la table

  5. #5
    Expert éminent sénior 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
    Points : 11 252
    Points
    11 252
    Par défaut
    Citation Envoyé par Lolitaaa Voir le message
    le tmcode est bien un INTEGER dans la table
    Perdu.
    Lancez sqlplus. Faite un explain plan for <REQUETE> suivi de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select * from table(dbms_xplan.display);
    Et cherchez dans le pavé des prédicats la coercition
    Predicate Information (identified by operation id):
    ---------------------------------------------------
    ...
    7 - filter(TO_NUMBER("SYS_ALIAS_3"."COD1")=1 ...

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 298
    Points : 85
    Points
    85
    Par défaut pas très claire
    pour plus d'info le début de la procédure est comme suivant ::

    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
    create or replace procedure copyRplanWorkFromProdVersion (tmcode_toUpdate IN INTEGER, tmcode_recVersion OUT INTEGER, tmcode_shdes IN VARCHAR2,tmcode_des IN VARCHAR2,tmcode_version_date IN DATE)
    IS
    
    pvComb_new    MPUPVTAB.PV_COMBI_ID%type;
    counter       INTEGER;
    tmcode_vsCode  RATEPLAN_VERSION.VSCODE%type;
    
    BEGIN
    
    counter:= 0;
    
    select  NVL(MAX(PV_COMBI_ID),0)+1 into pvComb_new from MPUPVTAB;
    
    SELECT  MAX(VSCODE) into tmcode_vsCode FROM RATEPLAN_VERSION WHERE TMCODE = tmcode_toUpdate  AND STATUS = 'P';                                                                  
    
    SELECT REC_VERSION INTO tmcode_recVersion FROM RATEPLAN  WHERE TMCODE = tmcode_toUpdate  FOR UPDATE
    le souci est dans la ligne en rouge !!!

    j'ai pas trop compris le but de ta dernière réponse

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 298
    Points : 85
    Points
    85
    Par défaut passage des paramètres pour la procédure
    pour plus d'info l'appel
    se fait comme suivant :


    copyRplanWorkFromProdVersion (201, tmcode_CorpIntense_recVersion, 'FIXH', 'Corporate Intense',TO_DATE('07/01/2009', 'MM/DD/YYYY'));

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 298
    Points : 85
    Points
    85
    Par défaut passage de string ou integer
    ya un truc que je comprend pas
    sur toad quand je tape :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from rateplan where tmcode=201
    OU:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from rateplan where tmcode='201'
    ça passe

    alors que le tmcode est bien INTEGER dans la table ??

  9. #9
    Expert éminent sénior 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
    Points : 11 252
    Points
    11 252
    Par défaut
    Voilà un exemple de conversion implicite du type des données
    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
    mni@VENUS>r
      1* create table rateplan (tmcode varchar2(10))
    
    Table créée.
    
    mni@VENUS>explain plan for SELECT * FROM rateplan WHERE tmcode=201;
    
    Explicité.
    
    mni@VENUS>select * from table(dbms_xplan.display);
    
    PLAN_TABLE_OUTPUT
    ------------------------------------------------------------------------------------------------------------------
    -----------------
    
    --------------------------------------------------------------------
    | Id  | Operation            |  Name       | Rows  | Bytes | Cost  |
    --------------------------------------------------------------------
    |   0 | SELECT STATEMENT     |             |     1 |     7 |     2 |
    |*  1 |  TABLE ACCESS FULL   | RATEPLAN    |     1 |     7 |     2 |
    --------------------------------------------------------------------
    
    Predicate Information (identified by operation id):
    ---------------------------------------------------
    
       1 - filter(TO_NUMBER("RATEPLAN"."TMCODE")=201)
    Note: cpu costing is off
    
    14 ligne(s) sélectionnée(s).
    RATEPLAN est une table ou une vue ?
    Si tu mets en commentaire le SQL que tu pense qu'il pose de problèmes la procédure s'exécute bien ou pas ?

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 298
    Points : 85
    Points
    85
    Par défaut rateplan une table
    rateplan est bien une table

    en plus je me suis bien amusée à commenter à chaque fois cette ligne et d'autres mais tjrs meme error!!

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 19
    Points : 10
    Points
    10
    Par défaut
    Peux-tu nous copier/coller la 20ème ligne de ton code à partir du mot DECLARE ?

Discussions similaires

  1. Erreur SELECT INTO dans une procédure stockée
    Par mercure07 dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 17/12/2008, 08h54
  2. Erreurs dans une procédure
    Par zekicker dans le forum Oracle
    Réponses: 9
    Dernier message: 14/01/2007, 08h14
  3. Réponses: 6
    Dernier message: 29/11/2005, 19h36
  4. Erreur de conversion et requête dynamique dans une procédure
    Par franculo_caoulene dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 01/08/2005, 15h12
  5. Comment lancer une erreur dans une procédure stockée
    Par borgfabr dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 17/05/2005, 17h06

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