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

Accès aux données Discussion :

[ADO.NET] PLSQLAssociativeArray et OracleDbType.Char erreur sur proc stock


Sujet :

Accès aux données

  1. #1
    Membre du Club Avatar de aeled
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2004
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2004
    Messages : 84
    Points : 51
    Points
    51
    Par défaut [ADO.NET] PLSQLAssociativeArray et OracleDbType.Char erreur sur proc stock
    Je souhaite envoyer des flots de données (par 500 par exemple) à une procédure stockée.

    Je me suis donc dirigé vers les tableaux associatifs. Voilà un extrait du PL/SQL :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    create or replace PACKAGE DESTATS_IMPORT_PACK
    AS 
        TYPE t_nuce IS TABLE OF DESTATS_CONNEXION.NUCE%TYPE INDEX BY BINARY_INTEGER; 
        TYPE t_nuabbd is table of DESTATS_CONNEXION.NUABBD%TYPE index by binary_integer;
        TYPE t_date_cnx is table of DESTATS_CONNEXION.DATE_CNX%TYPE index by binary_integer;
        TYPE t_code_media is table of DESTATS_CONNEXION.CODE_MEDIA%TYPE index by binary_integer;
     
    PROCEDURE IMPORT(l_nuce IN t_nuce, l_nuabbd  IN t_nuabbd, l_date_cnx IN t_date_cnx, l_code_media IN t_code_media);
    END;

    Le champ nuce est un NUMBER, les autres champs sont en char. J'ai fait des tests, pour le champ NUMBER, cela fonctionne. En revanche, impossible pour les champs char. J'ai testé en varchar2, même symptome.

    Extrait du code C# :

    Code C# : 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
     
    OracleCommand oCommand    = new OracleCommand("DESTATS_IMPORT_PACK.IMPORT", oConnexion);
                oCommand.CommandType    = System.Data.CommandType.StoredProcedure;
     
    OracleParameter oNuce    = new OracleParameter("l_nuce", OracleDbType.Int32);
                oNuce.OracleDbType        = OracleDbType.Int32;
                oNuce.Direction            = ParameterDirection.Input;
                oNuce.CollectionType    = OracleCollectionType.PLSQLAssociativeArray;
                oNuce.Value                = lNuce;
                oNuce.Size                = lNuce.Length;
                oCommand.Parameters.Add(oNuce);
     
    OracleParameter oNuabbd = new OracleParameter("l_nuabbd", OracleDbType.Char);
                oNuabbd.Direction        = ParameterDirection.Input;
                oNuabbd.Value            = lNuabbd;
                oNuabbd.CollectionType    = OracleCollectionType.PLSQLAssociativeArray;
                oNuabbd.Size            = lNuabbd.Length;

    Je teste sur une base Oracle 8 et une autre base Oracle 10 EX

    Si quelqu'un a déjà mis ca en place, ca me sauverait un peu la vie

    David

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2006
    Messages : 27
    Points : 34
    Points
    34
    Par défaut mmh
    As-tu un message d'erreur particulier ?

  3. #3
    Membre du Club Avatar de aeled
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2004
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2004
    Messages : 84
    Points : 51
    Points
    51
    Par défaut
    + System.SystemException {"ORA-06550: Ligne 1, colonne 7 :\nPLS-00306: numéro ou types d'arguments erronés dans appel à 'IMPORT'\nORA-06550: Ligne 1, colonne 49 :\nPLS-00418: le type de lien tableaux doit correspondre au type d'élément de table indexée\nORA-06550: Ligne 1, colonne 7 :\nPL/SQL: Statement ignored"} System.SystemException
    Sachant que ce que j'envoie dans les Values des parameters ce sont des tableaux de tableaux de char

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    object[]	lNuabbd		= new object[100];
    lNuabbd[iFlag] = lDecoup[1].ToCharArray();
    J'ai fait le test en passant un tableau de string et en mettant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    OracleParameter oMedia	= new OracleParameter("l_code_media", OracleDbType.VarChar2);

Discussions similaires

  1. Erreur sur procédure stockée appelant une macro
    Par dreylm dans le forum Macro
    Réponses: 6
    Dernier message: 19/01/2010, 13h14
  2. [VB.Net2005][Datagridview] Filtrage sur proc. stockée ?
    Par cedric_g dans le forum Windows Forms
    Réponses: 3
    Dernier message: 15/10/2007, 10h56
  3. Réponses: 8
    Dernier message: 20/09/2007, 15h29
  4. [2005] Datagrid et binding sur proc. stockée ?
    Par cedric_g dans le forum Windows Forms
    Réponses: 11
    Dernier message: 07/08/2007, 17h03
  5. [VB.NET] Erreur sur la creation dynamique d'une texbox
    Par headcooper dans le forum ASP.NET
    Réponses: 4
    Dernier message: 01/07/2004, 19h34

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