Mam procedurę składowaną PL/SQL, która pobiera 4 wejścia. Jednym z tych danych wejściowych jest tablica asocjacyjna (Oracle Type: Table of VARCHAR2 (1) index firmy PLS_INTEGER).C# 2010, ODP.net, wywołanie procedury przechowywanej przechodzącej tablicy
Chcę mieć program C#, który wywołuje tę procedurę składowaną z odpowiednimi wejściami, w tym tablicą asocjacyjną.
Używam ODP.net 11.2 z Visual C# 2010 Express i Oracle 11gR2.
Nie mogę znaleźć żadnych dobrych przykładów jak przekazać tablicę do procedury pl/sql z C#. Czy ktokolwiek może mi podać przykład? Po dokumentacji Oracle dokładnie daje mi błąd mówiąc: Zła liczba lub typ argumentów.
Moje C# Kod:
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();
Całe postępowanie nie jest log wiadomość. Po prostu próbuję uruchomić tę koncepcję.
Dzięki za odpowiedź. Dam ci szansę. – user2316634
po uruchomieniu TYPE integer_list IS TABELA Your_table.id_cloumn INDEX INDEX BY BINARY_INTEGER; Pokazuje niepoprawną instrukcję sql –
Wypróbuj 'CREATE OR REPLACE TYPE inst_id_list IS TABLE OF INSTRUMENT.Inst_Id% INDEX INDEX BINARY_INTEGER;'. Musisz zastąpić sugerowane argumenty EvgenyL rzeczywistymi obiektami, które już istnieją w twojej db. (np. id_inst jest polem w tabeli INSTRUMENT). – dipdapdop