1. #1
    r83
    r83 est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    mars 2003
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mars 2003
    Messages : 271
    Points : 86
    Points
    86

    Par défaut mapper collection<string> sur paramètre tableau oracle PLSQL

    Bonjour,

    environnement C# vs2012/ Oracle 11G.
    Je stocke des chaines dans une collection C# (collection<string>), et je dois passer cette collection en paramètre à une procédure stockée Oracle qui adment en paramètre un tableau (type tstrings IS TABLE OF varchar(50) INDEX BY pls_integer range 0..9

    Je n'y arrive pas ....

    ça marche quand j'envoie depuis C# un tableau de strings (String[]), mais cette solution ne me convient pas car je ne conanis pas à priori la taille de mon tableau.
    Si quelqu'un a une solution ....
    Merci

  2. #2
    Membre expert

    Homme Profil pro
    Développeur .NET
    Inscrit en
    novembre 2010
    Messages
    1 641
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : novembre 2010
    Messages : 1 641
    Points : 3 163
    Points
    3 163

    Par défaut

    Bonsoir,
    tu as la méthode ToArray() sur les listes qui te permet de retourner ta liste sous la forme d'un tableau.
    LoL Stat, mon application League of Legends pour WP 8.1/WP10/Windows 8.1/Windows 10 https://www.microsoft.com/fr-fr/stor...t/9nblggh3g30b

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    janvier 2010
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : janvier 2010
    Messages : 183
    Points : 83
    Points
    83

    Par défaut

    Essaye avec ce bout de code qui marche :

    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
     
            public void TestCollection()
            {            
                try
                {
                    Collection<String> chaine = new Collection<string>();
                    chaine.Add("Chaine1");
                    chaine.Add("Chaine2");
                    UneOracleCommand = new OracleCommand("pckparticipant.test", CnOracle);
                    UneOracleCommand.CommandType = CommandType.StoredProcedure;
                    OracleParameter pcollection = new OracleParameter();
                    pcollection.ParameterName = "unecollection";
                    pcollection.Direction = ParameterDirection.Input;
                    pcollection.OracleDbType = OracleDbType.Varchar2;
                    pcollection.CollectionType = OracleCollectionType.PLSQLAssociativeArray;
                    pcollection.Value = chaine.ToArray();
                    pcollection.Size = chaine.Count;
                    UneOracleCommand.Parameters.Add(pcollection);
                    UneOracleCommand.ExecuteNonQuery();
                }
                catch (OracleException Oex)
                {
                    MessageBox.Show("Erreur Oracle \n" + Oex.Message);
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Autre Erreur  \n" + ex.Message);
                }
            }
    Et côté PLSQL :
    Code SQL : 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
     
    create or replace
    package body pckparticipant
    is
    erreur exception;
     procedure  Test(unecollection in tdates)
    is
    erreur exception;
    begin
      FOR i IN unecollection.FIRST .. unecollection.LAST 
      LOOP
          insert into test values (unecollection(i));
      END LOOP;
    exception
        when erreur then
          raise_application_error(-20099, 'test erreur');
    end;
    end pckparticipant;

    ça devrait marcher !

  4. #4
    r83
    r83 est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    mars 2003
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mars 2003
    Messages : 271
    Points : 86
    Points
    86

    Par défaut

    Merci beaucoup loustalet, le code marche impéccable.
    Bon we

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

Discussions similaires

  1. Paramètre : pointeur sur un tableau
    Par _Michel dans le forum Débuter
    Réponses: 2
    Dernier message: 15/02/2009, 17h08
  2. Réponses: 8
    Dernier message: 17/09/2008, 13h11
  3. Suppression et décalage sur un tableau de String
    Par allstar dans le forum Débuter
    Réponses: 3
    Dernier message: 09/05/2008, 17h53
  4. [Collection] Tri sur un tableau d'entier
    Par Grand sorcier dans le forum java.util
    Réponses: 2
    Dernier message: 17/07/2006, 17h07
  5. Réponses: 3
    Dernier message: 24/09/2005, 10h34

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