Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 4 sur 4
  1. #1
    r83
    r83 est déconnecté
    Membre du Club
    Inscrit en
    mars 2003
    Messages
    247
    Détails du profil
    Informations forums :
    Inscription : mars 2003
    Messages : 247
    Points : 48
    Points
    48

    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 John Doe
    Développeur .NET
    Inscrit en
    novembre 2010
    Messages
    1 159
    Détails du profil
    Informations personnelles :
    Nom : Homme John Doe
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : novembre 2010
    Messages : 1 159
    Points : 1 929
    Points
    1 929

    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.

  3. #3
    Membre du Club
    Inscrit en
    janvier 2010
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : janvier 2010
    Messages : 136
    Points : 40
    Points
    40

    Par défaut

    Essaye avec ce bout de code qui marche :

    Code :
    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 :
    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 du Club
    Inscrit en
    mars 2003
    Messages
    247
    Détails du profil
    Informations forums :
    Inscription : mars 2003
    Messages : 247
    Points : 48
    Points
    48

    Par défaut

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

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •