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 :

[9i]ajouter des valeurs dans une var type tableau créée


Sujet :

Oracle

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 220
    Points : 70
    Points
    70
    Par défaut [9i]ajouter des valeurs dans une var type tableau créée
    Bonsoir,

    j'ai créé une variable qui est un tableau de char, seulement je ne sait pas comment la remplir...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE OR REPLACE type TAB_CHAR as table of CHAR;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DECLARE
    vc_total TAB_CHAR;
    comment faire pour remplir cette variable??

    merci

  2. #2
    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
    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

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 220
    Points : 70
    Points
    70
    Par défaut
    merci de ta reponse mais sa ne fonctionne toujours pas, j'ai mis sa :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    vc_total(1).mail := vc_mail;
    DBMS_OUTPUT.PUT (vc_total(1).mail);
    et j'ai cette erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PLS-00487: Référence de variable 'CHAR' non valide

  4. #4
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE OR REPLACE type TAB_CHAR as table of CHAR;
    sans indication de longueur, CHAR est égal à CHAR(1)

    est-ce bien ce que vous voulez ?

    c'est quoi vc_mail ?

    ça ira plus vite si vous fournissez l'intégralité du code.
    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

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 220
    Points : 70
    Points
    70
    Par défaut
    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
    CREATE OR REPLACE function f_controle_cel(
    in_refbp IN varchar)
    return smallint IS
    vc_refbp varchar(9);
    vc_today date;
    vc_date_creation date;
    vc_flagcel char;
    vc_mail char;
    vc_mailok smallint;
    vc_newsok smallint;
    vc_date_max date;
    vc_total TAB_CHAR;
    BEGIN
    	SELECT CLI_FLAGCEL INTO vc_flagcel FROM CLIENT WHERE CLI_REFBP = in_refbp;
    	SELECT TRUNC(CLI_DATE_CREATION) INTO vc_date_creation FROM CLIENT WHERE CLI_REFBP = in_refbp;
    	SELECT CLI_MAIL,CLI_MAILOK,CLI_NEWSOK INTO vc_mail,vc_mailok,vc_newsok FROM CLIENT WHERE CLI_REFBP = in_refbp;
    	--DBMS_OUTPUT.PUT (vc_date_creation); 
    	vc_date_max := vc_date_creation + 15;
    	vc_today := TRUNC(sysdate);
    	IF (vc_flagcel = 'v')
    	THEN
    	return 0;
    	ELSE
    		IF (vc_flagcel = 'd')
    		THEN
    			IF (vc_date_max >= vc_today)
    			THEN
    				--DBMS_OUTPUT.PUT ('a temps');
    				return 2;
    			ELSE
    				 --DBMS_OUTPUT.PUT ('trop tard');
    				 vc_total(1) := vc_mail;
    				 DBMS_OUTPUT.PUT (vc_total(1));
    				 return 1;
    			END IF;
    		END IF;
    	END IF;
    END;
    /
    vc_mail c'est le mail que je doit renvoyé(accompagner d'autres elements) dans le tableau

  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
    Comme je le disais, CHAR = CHAR(1). Donc vous ne pourrez pas enter de chaînes > à 1 caractères dans les éléments de votre collection

    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
    SQL> set serveroutput on
    SQL> 
    SQL> DECLARE
      2    -- on initialise la collection avec 2 éléments --
      3    ttab  TAB_CHAR := TAB_CHAR( '1', '2' ) ;
      4  BEGIN
      5    -- on ajoute un troisième élément --
      6    ttab.extend ;
      7    ttab(3) := '3' ;
      8    FOR i IN ttab.First .. ttab.Last LOOP
      9      dbms_output.put_line( 'ttab(' || TO_CHAR(i) || ') = ' || ttab(i) ) ;
     10    END LOOP ;
     11  END ;
     12  /
    ttab(1) = 1
    ttab(2) = 2
    ttab(3) = 3
     
    Procédure PL/SQL terminée avec succès.
     
    SQL>
    Relisez tranquilement le tuto....
    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
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 220
    Points : 70
    Points
    70
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE OR REPLACE type TAB_CHAR as table of CHAR(100);
    j'ai crée la variable dans la base.

    et je ne comprend pas comment faire, mm avec ce que vous m'avez indiqué...

  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
    A quoi doit servir cette collection ?
    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
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 220
    Points : 70
    Points
    70
    Par défaut
    j'ai changer de type, j'ai créer un record(plus simple pour mon utilisation...merci encore de votre aide

    j'urais encore une question, comment faire pour que la valeur retournée par une fonction puisse etre un record ou un chiffre? vue que dans la declaration de la fonction on met le type de retour, mais j'ai plusieur type de retour possible, comment gérer?

  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
    Une fonction ne peut retourner qu'un seul type à la fois.
    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
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 220
    Points : 70
    Points
    70
    Par défaut
    je me doute bien , mais n'y a t il pas une facon de finté?

  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
    Soit vous définissez un type de variable de retour le plus "vaste" possible, soit vous utilisez dans la fonction, des variables de type IN OUT.
    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
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 220
    Points : 70
    Points
    70
    Par défaut
    en fait lorsque ma fonction est lencée, elle recoi une seul valeur(in_refbp) et elle doit retourné soit un code retour (return 1 soir un record.

    la gestion des parametre IN/OUT se fait avant DECLARE et la seul variable avant DECLARE est in_refbp, donc je ne peut pas mettre par exmple mon RECORD en OUT

  14. #14
    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
    Attention, un RECORD ne peut pas être créé en base (en dehors du PL/SQL).
    Si vous devez passer des records vis vos procédure/fonctions, il faudra les encapsuler dans un package.
    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

Discussions similaires

  1. Ajouter des constantes dans une "Type Library"
    Par Deudvid dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 06/03/2011, 18h52
  2. ajouter des valeurs dans une ComboBox (zone de liste modifiable)
    Par ghosty04 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 01/12/2008, 18h11
  3. Ajouter des valeurs dans une listebox sur click
    Par bobosh dans le forum VBA Access
    Réponses: 8
    Dernier message: 11/08/2008, 13h47
  4. Réponses: 2
    Dernier message: 28/03/2006, 11h45
  5. fonction récupérant des valeurs dans une fonction popup...
    Par petitsims dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 20/01/2005, 14h51

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