Tôi có một thủ tục được lưu trữ PL/SQL lấy 4 đầu vào. Một trong những đầu vào đó là một mảng kết hợp (Oracle Type: Table of VARCHAR2 (1) index bởi PLS_INTEGER).C# 2010, ODP.net, gọi thủ tục được lưu trữ qua mảng
Tôi muốn có một chương trình C# gọi thủ tục được lưu trữ này với các đầu vào thích hợp bao gồm mảng kết hợp.
Tôi đang sử dụng ODP.net 11.2 với Visual C# 2010 Express và Oracle 11gR2.
Tôi không thể tìm thấy bất kỳ ví dụ hay về cách chuyển mảng sang quy trình pl/sql từ C#. Ai có thể cho tôi một ví dụ? Sau tài liệu Oracle chính xác cho tôi lỗi nói sai số hoặc loại đối số.
C của tôi # Code:
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();
Tất cả các thủ tục của tôi, không có gì ghi lại một tin nhắn. Tôi chỉ cố gắng để có được khái niệm này để làm việc.
Cảm ơn cho câu trả lời. Tôi sẽ cho nó một viên đạn. – user2316634
khi tôi chạy TYPE integer_list IS TABLE OF Your_table.id_cloumn% TYPE INDEX BY BINARY_INTEGER; Nó hiển thị câu lệnh sql không hợp lệ –
Thử 'TẠO HOẶC THAY THẾ TYPE inst_id_list LÀ BẢNG INSTRUMENT.Inst_Id% LOẠI INDEX BỞI BINARY_INTEGER;'. Bạn cần phải thay thế các đối số gợi ý của EvgenyL bằng các đối tượng thực đã tồn tại trong db của bạn. (ví dụ: inst_id là một trường trong bảng INSTRUMENT). – dipdapdop