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
Partager