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

SQL Oracle Discussion :

envoyer une chaine dans une procedure


Sujet :

SQL Oracle

  1. #1
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 152
    Points : 59
    Points
    59
    Par défaut envoyer une chaine dans une procedure
    Salut,

    J'ai un problème que j'arrive pas à comprendre.
    J'ai une procedure sous Oracle, dans la quelle je pase un paramètre qui est de type char (5).
    Qd j'ecris :
    create or replace procedure (parm char (5));
    il me donne une erreur alors je suis obliger d'ecrire char seul et qd j'ecris char seul, et j'insère ce paramètre dans un champ de type char (5), il m'affiche une erreu que "ORA-01401: valeur insérée trop grande pour colonne".

    J'arrice pas à comprendre, c qoi mon problème et comment je peux passerune chaine de caractères????

    Merci d'avance,

  2. #2
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Utilises plutôt le type VARCHAR2.
    Donnes le code de ta procédure.
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  3. #3
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    1 024
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1 024
    Points : 1 294
    Points
    1 294
    Par défaut
    Dans la déclaration d'une proc, il ne faut pas dimensioner les paramètres d'entrée. Ton erreur doit venir d'une requête dans le corp de ta procédure...

  4. #4
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 152
    Points : 59
    Points
    59
    Par défaut
    En fait, merci pour ton aide, mais j'ai déjà essayé avec varchar2, c la meme chose.
    Le problème est que quand je met des paramètres de type char ou varchar2, il prend la valeur max c.a.d 200 et qd j'essaie d'inserer cette valeur dans la table , ou dans un champs de type char (5), il m'affiche que la valeur est trop grande car qd j'ai fait length il m'a affiché 200 pou un paramètre contient '123' et ca arrive parce que j'ai pas precisé à cote de paramètre combien de char c.a.d , je n'ai pas ecrit char (5) mais le compilateur aime pas de donner des valeur à cote de char ou meme varchar2 dans les liste de paramètre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    procedure xxx (aparam char)
    as
    begin
    insert into table values (aparam);
    end;
    si on fait length(aparam) , il me donne 200 et qd j'ecris procedure xxx (aparam char(5)), le compilateur donne une erreur.

  5. #5
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    1 024
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1 024
    Points : 1 294
    Points
    1 294
    Par défaut
    Citation Envoyé par 18Marie
    ....si on fait length(aparam) , il me donne 200 ....
    A mon avis le problème se trouve dans la procédure appelante.

  6. #6
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Citation Envoyé par remi4444
    A mon avis le problème se trouve dans la procédure appelante.
    +1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SQL> create procedure pr1 (v varchar2, c char) is 
      2  begin
      3    dbms_output.put_line ('length (v) = ' || length (v));
      4    dbms_output.put_line ('length (c) = ' || length (c));
      5  end;
      6  /
    Procedure created.
     
    SQL> exec pr1 ('a', 'b')
    length (v) = 1
    length (c) = 1
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

  7. #7
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 152
    Points : 59
    Points
    59
    Par défaut
    Merco pour tes aides, en fait, je travaille sous IDE, sql developper et c'est lui qui met automatiquement les parmaètres passés de type char en 200, il falaiit que j'ecris moi meme l'appell c.a.d monprocedure('1234');

    Mais pourquoi on ne peut pas mettre dans la liste des paramètres la ongueur souhaité c.a.d procedure (param char(5))???

  8. #8
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Ben justement, la longueur ne se précise pas dans les paramètres de fonction/procédure.
    Le problème des CHAR c'est que la taille est toujours au max :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    DECLARE
    	c CHAR(5);
    	d VARCHAR2(5);
    BEGIN
    	c := 'a';
    	d := 'a';
    	dbms_output.put_line('CHAR' || ' ' || c || ':' || LENGTH(c));
    	dbms_output.put_line('VCHR' || ' ' || d || ':' || LENGTH(c));
    END;
     
    CHAR a    :5
    VCHR a:5
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  9. #9
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    1 024
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1 024
    Points : 1 294
    Points
    1 294
    Par défaut
    Citation Envoyé par 18Marie
    ...Mais pourquoi on ne peut pas mettre dans la liste des paramètres la ongueur souhaité c.a.d procedure (param char(5))???
    C'est comme ça, c'est le fonctionnement PL/SQL...

    Si tu veux pas t'embeter:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure xxx (aparam char)
    AS
    begin
    INSERT INTO TABLE VALUES (rtrim(aparam));
    end;
    et on n'en parle plus...

Discussions similaires

  1. recherche d'une chaine dans une chaine
    Par jpclutier dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 03/12/2007, 11h30
  2. Envoyer une formulaire dans une page dans une Frame
    Par zooffy dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 29/06/2007, 10h13
  3. Tester une chaine dans une chaine
    Par ulysse031 dans le forum Algorithmes et structures de données
    Réponses: 13
    Dernier message: 26/03/2007, 00h48
  4. chercher caractére d'une chaine dans une chaine
    Par ulysse031 dans le forum Langage
    Réponses: 25
    Dernier message: 21/03/2007, 18h09
  5. Réponses: 2
    Dernier message: 19/10/2005, 15h38

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