C# 2010, ODP.net, appeler la procédure stockée en passant tableau
J'ai une procédure stockée PL/SQL qui prend 4 entrées. L'une de ces entrées est un tableau associatif (Oracle Type: Table of VARCHAR2(1) indice par PLS_INTEGER).
Je veux avoir un programme C# qui appelle cette procédure stockée avec le bon entrées, y compris le tableau associatif.
Je suis en utilisant ODP.net 11.2 avec Visual C# 2010 Express et Oracle 11gR2.
Je ne trouve pas de bons exemples de la façon à passer un tableau à une pl/sql procédure à partir de C#. Quelqu'un peut-il me donner un exemple? Suite à la Documentation d'Oracle exactement me donne un message d'erreur indiquant un Mauvais numéro ou le type des arguments.
Mon Code C#:
OracleCommand cmd = new OracleCommand("begin sdg_test.sdg_test2(:1); end;", conn);
OracleParameter Param1 = cmd.Parameters.Add("1", OracleDbType.Varchar2);
Param1.Direction = ParameterDirection.Input;
Param1.CollectionType = OracleCollectionType.PLSQLAssociativeArray;
Param1.Value = new string[22] { "Y", "Y", "N", "Y", "N", "Y", "Y", "Y", "Y", "Y", "N", "Y", "N", "Y", "Y", "Y", "Y", "Y", "N", "Y", "N", "Y" };
Param1.Size = 22;
Param1.ArrayBindSize = new int[22] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 };
cmd.ExecuteNonQuery();
conn.Close();
conn.Dispose();
Toute ma procédure n'est l'enregistrement d'un message. Je suis juste essayer d'obtenir ce concept de travail.
OriginalL'auteur user2316634 | 2013-04-24
Vous devez vous connecter pour publier un commentaire.
Vous pouvez commencer à partir de (plus simple):
Ensuite, ajouter le package /procédure en db:
Une autre option est:
Mais c'est plus compliqué, car vous avez besoin de définir de nouveaux types de la procédure stockée, comme
créer un schéma-type comme
Et ensuite les utiliser dans la Procédure Stockée, comme
quand je lance TYPE integer_list EST le TABLEAU DE Your_table.id_cloumn%TYPE d'INDEX PAR BINARY_INTEGER; Il montre non valide instruction sql
Essayez
CREATE OR REPLACE TYPE inst_id_list IS TABLE OF INSTRUMENT.Inst_Id%TYPE INDEX BY BINARY_INTEGER;
. Vous avez besoin de remplacer EvgenyL suggéré par des arguments avec des objets réels qui existent déjà dans votre base de données. (c'est à dire inst_id est un champ dans la table de l'INSTRUMENT).OriginalL'auteur evgenyl