Ошибка VB.NET при передаче типа параметра Oracle PLSQLAssociativeArray - PullRequest
1 голос
/ 03 января 2012

У меня есть хранимая процедура 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);`

Я не уверен, почему это не сработает.

1 Ответ

0 голосов
/ 17 января 2012

Не уверен насчет DataAccess, но OracleClient это не понравилось, если вы пропустили двоеточие (:) в имени параметра.

Например: CatalogNosParam.ParameterName = ":v_catalog_nos_"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...