У меня есть хранимая процедура Oracle, которая выглядит следующим образом:
PROCEDURE GET_PART_CHARACTERISTICS (v_catalog_nos_ IN CatalogNos,
Parts_Char_Cursor out sys_refcursor) AS
BEGIN
OPEN Parts_Char_Cursor FOR
SELECT catalog_no, characteristic_code, unit_meas, attr_value
FROM IFSAPP.SALES_PART_CHARACTERISTIC
WHERE CATALOG_NO IN (select * from table(v_catalog_nos_));
END GET_PART_CHARACTERISTICS;
Затем она вызывается через VB.NET с использованием:
Dim cmd As New Oracle.DataAccess.Client.OracleCommand()
cmd.Connection = conn
cmd.CommandType = CommandType.StoredProcedure
cmd.CommandText = "dci_sales_group_part_api.get_part_characteristics"
Dim CatalogNosParam As New Oracle.DataAccess.Client.OracleParameter()
CatalogNosParam.ParameterName = "v_catalog_nos_"
CatalogNosParam.Direction = ParameterDirection.Input
CatalogNosParam.OracleDbType = Oracle.DataAccess.Client.OracleDbType.Varchar2
CatalogNosParam.Size = 100
Dim CatalogNoArr(0) As String
CatalogNoArr(0) = .Item("catalog_no")
CatalogNosParam.Value = CatalogNoArr
CatalogNosParam.CollectionType = Oracle.DataAccess.Client.OracleCollectionType.PLSQLAssociativeArray
cmd.Parameters.Add(CatalogNosParam)
Dim partscharParam As New Oracle.DataAccess.Client.OracleParameter()
partscharParam.ParameterName = "Parts_Char_Cursor"
partscharParam.Direction = ParameterDirection.Output
partscharParam.OracleDbType = Oracle.DataAccess.Client.OracleDbType.RefCursor
cmd.Parameters.Add(partscharParam)
Dim da As New Oracle.DataAccess.Client.OracleDataAdapter(cmd)
da.Fill(dsPartCharacteristics, "PartCharacteristics")
Я получаю сообщение об ошибке: " ORA-06550: строка 1, столбец 7: PLS-00306: неверный номер или типы аргументов при вызове 'GET_PART_CHARACTERISTICS' ORA-06550: строка 1, столбец 7: PL / SQL: оператор игнорируется"
Тип CatalogNos объявлен как:
`create or replace TYPE CATALOGNOS AS TABLE OF VARCHAR2(100);`
Я не уверен, почему это не сработает.