2012-01-03 8 views
1

我有一个Oracle存储过程,看起来像:VB.NET示数

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: Statem

`create or replace TYPE CATALOGNOS AS TABLE OF VARCHAR2(100);` 

我不知道为什么,这是行不通的:ENT忽略

为CatalogNos类型声明。

回答

0

不确定关于DataAccess,但如果省略参数名称中的冒号(:),OracleClient不喜欢它。

例如:CatalogNosParam.ParameterName = ":v_catalog_nos_"