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

Oracle Discussion :

Problème lors du EXTEND d'un tableau


Sujet :

Oracle

  1. #1
    Candidat au Club
    Inscrit en
    Octobre 2003
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 7
    Points : 2
    Points
    2
    Par défaut Problème lors du EXTEND d'un tableau
    Je veux manipuler un tableau qui est en paramètre OUt de ma proc stockée suivante :

    PROCEDURE Plandetravail(UserParameter1 IN VARCHAR2, Numero OUT tbl_numero,
    t_NumFeuilletP1 OUT tbl_numfeuilletP1,
    t_NumFeuilletP2 OUT tbl_numfeuilletP2)
    IS

    CURSOR QueryInitCursor(UserParameter1 IN CHAR) IS
    SELECT NUMERO,NUMFEUILLETP1, NUMFEUILLETP2
    FROM TB_TABLEDESOT
    WHERE MASSETAG = UserParameter1;

    T_Feuillets T_numfeuillet;
    T_NbreOccus T_NbreOccu;
    LigneQueryInit QueryInitCursor%ROWTYPE;

    BEGIN
    FOR LigneQueryInit IN QueryInitCursor(UserParameter1) LOOP
    --SearchFeuilletTableOccu(LigneQueryInit.NUMFEUILLETP1,T_Feuillets,T_NbreOccus);
    --SearchFeuilletTableOccu(LigneQueryInit.NUMFEUILLETP2,T_Feuillets,T_NbreOccus);
    DBMS_OUTPUT.PUT_LINE (LigneQueryInit.NUMFEUILLETP1);
    t_NumFeuilletP1.EXTEND;
    t_NumFeuilletP1(t_NumFeuilletP1.LIMIT) := LigneQueryInit.NUMFEUILLETP2;
    END LOOP;
    END;

    J'ai le message suivant quand je compile mon package :
    PLS-00306: wrong number or types of arguments in call to 'EXTEND'

    Merci pour votre aide.

  2. #2
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    493
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 493
    Points : 605
    Points
    605
    Par défaut
    hello

    EXTEND ne peut être utilisé dans les cas suivants

    1- pour initialiser une collection (ce qui me semble être ton cas ?)
    2- index-by tables

    en cas de NOT NULL contraintes, tu ne peux utiliser que la forme EXTEND(n,i) avec n le nombre de copies ajoutées à l'élément i (ce qui semble correpondre à ton message d'erreur)

    voir doc PLSQL au chapitre 5 pour l'info officielle

    bon debugging

  3. #3
    Candidat au Club
    Inscrit en
    Octobre 2003
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Ok, mais je fais comment pour initialiser ma collection ?

    J'ai du rater un truc dans les exemples que j'ai vus. Mais je vois pas quoi...

  4. #4
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    493
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 493
    Points : 605
    Points
    605
    Par défaut
    tu la remplis via un select into ou un curseur

    PL/SQL user guide chapitre 5

  5. #5
    Candidat au Club
    Inscrit en
    Octobre 2003
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Celà reviendrais à faire ceci par exemple (?):
    LCRequete := 'SELECT NUMERO,NUMFEUILLETP1, NUMFEUILLETP2 FROM TB_TABLEDESOT WHERE MASSETAG = '''||UserParameter1||'''' ;

    EXECUTE IMMEDIATE LCRequete BULK COLLECT INTO Numero, t_NumFeuilletP1, t_NumFeuilletP2;

    Cependant le BULK COLLECT n'a pas l'air de marcher chez moi.

    D'autres part, où puis-je trouver la doc PLSQL (lien) ?

  6. #6
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Comment avez-vous déclaré le type de votre tableau ?
    TABLE, INDEX-BY, VARRAY ?
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  7. #7
    Candidat au Club
    Inscrit en
    Octobre 2003
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Voici la déclaration des tableaux que je souhaite manipuler :
    TYPE tbl_numero IS TABLE OF TB_TABLEDESOT.NUMERO%TYPE INDEX BY BINARY_INTEGER;
    TYPE tbl_numfeuilletP1 IS TABLE OF TB_TABLEDESOT.NUMFEUILLETP1%TYPE INDEX BY BINARY_INTEGER;
    TYPE tbl_numfeuilletP2 IS TABLE OF TB_TABLEDESOT.NUMFEUILLETP2%TYPE INDEX BY BINARY_INTEGER;

  8. #8
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Vous n'avez pas besoin de la fonction EXTEND avec les collections de type index-by.
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  9. #9
    Candidat au Club
    Inscrit en
    Octobre 2003
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Merci, mais de quoi ai-je besoin alors ?

  10. #10
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    de rien !
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  11. #11
    Candidat au Club
    Inscrit en
    Octobre 2003
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    C'est abscond pour moi.
    Comment je fais alors pour remplir mon tableau sans l'agrandir à chaque itération?

  12. #12
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Vous augmentez simplement l'indice :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For i in 1..10 loop
      montab(i) := .... ;
    End loop ;
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  13. #13
    Candidat au Club
    Inscrit en
    Octobre 2003
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Oh la la . çà paraît si simple quand c'est écrit clairement. Merci bcp, je m'en vais l'essayer tout de suite.

  14. #14
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    493
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 493
    Points : 605
    Points
    605
    Par défaut
    Citation Envoyé par Marc Musette
    hello

    EXTEND ne peut être utilisé dans les cas suivants

    ...
    2- index-by tables
    ...
    la doc plsql et toute la doc relative à la 8i, 9i et 10g se trouve sur otn.oracle.com/documentation

    bonne lecture !

  15. #15
    Expert confirmé

    Profil pro
    Inscrit en
    Avril 2002
    Messages
    3 338
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 338
    Points : 4 657
    Points
    4 657
    Par défaut
    banana31, pourrais-tu utiliser la balise code tel qu'indiqué dans les règles du forum.

    Ceci est plus lisible :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    TYPE tbl_numero IS TABLE OF TB_TABLEDESOT.NUMERO%TYPE INDEX BY BINARY_INTEGER; 
    TYPE tbl_numfeuilletP1 IS TABLE OF TB_TABLEDESOT.NUMFEUILLETP1%TYPE INDEX BY BINARY_INTEGER; 
    TYPE tbl_numfeuilletP2 IS TABLE OF TB_TABLEDESOT.NUMFEUILLETP2%TYPE INDEX BY BINARY_INTEGER;
    que ceci :
    TYPE tbl_numero IS TABLE OF TB_TABLEDESOT.NUMERO%TYPE INDEX BY BINARY_INTEGER;
    TYPE tbl_numfeuilletP1 IS TABLE OF TB_TABLEDESOT.NUMFEUILLETP1%TYPE INDEX BY BINARY_INTEGER;
    TYPE tbl_numfeuilletP2 IS TABLE OF TB_TABLEDESOT.NUMFEUILLETP2%TYPE INDEX BY BINARY_INTEGER;



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

Discussions similaires

  1. Problème lors du remplissage d'un tableau
    Par KevDrn dans le forum Excel
    Réponses: 1
    Dernier message: 10/07/2013, 12h05
  2. [XL-2010] Problème lors de la création de tableau croisé dynamique avec vba
    Par juju05 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 26/07/2012, 17h10
  3. [Toutes versions] Problème lors d'une copie de tableau
    Par Florian.R dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 10/12/2010, 11h05
  4. problème lors du création d'un tableau
    Par Sfaxiano dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 9
    Dernier message: 01/06/2010, 19h32
  5. Réponses: 16
    Dernier message: 01/06/2008, 20h01

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