oracle数据库,存储过程中自定义数组类型怎么传参 返回

SqlSugar 沟通中
6 190

存储过程定义

  PROCEDURE import_data_to_temp (

    p_complete_subinventory_code   IN     VARCHAR2,
    p_complete_locator             IN     VARCHAR2,
    p_created_by                   IN     VARCHAR2,
    
    p_source_line_id               IN     msi_collection_types.number_aat,
    p_header_id                       OUT NUMBER,
    p_line_id                         OUT msi_collection_types.number_aat,
    p_error_message                   OUT VARCHAR2)

类型定义

   type number_aat is table of number index by simple_integer;

ado调用传参

                cmd.Parameters.Add(new OracleParameter { ParameterName = "@p_complete_subinventory_code ", OracleDbType = OracleDbType.Varchar2, Value = mHeader.SubinventoryCode });
                cmd.Parameters.Add(new OracleParameter { ParameterName = "@p_complete_locator", OracleDbType = OracleDbType.Varchar2, Value = DBNull.Value });
                cmd.Parameters.Add(new OracleParameter { ParameterName = "@p_created_by", OracleDbType = OracleDbType.Varchar2, Value = mHeader.CreateUser });

                cmd.Parameters.Add(new OracleParameter { ParameterName = "@p_source_line_id", CollectionType = OracleCollectionType.PLSQLAssociativeArray, OracleDbType = OracleDbType.Int32, Value = new int[] { mHeader.ReworkOcId }, Size = 1 });

                cmd.Parameters.Add(new OracleParameter { ParameterName = "@p_header_id", OracleDbType = OracleDbType.Int32, Direction = ParameterDirection.Output });
                cmd.Parameters.Add(new OracleParameter { ParameterName = "@p_line_id", CollectionType = OracleCollectionType.PLSQLAssociativeArray, OracleDbType = OracleDbType.Int32, Direction = ParameterDirection.Output, Size = 10 });
                cmd.Parameters.Add(new OracleParameter { ParameterName = "@p_error_message", OracleDbType = OracleDbType.Varchar2, Size = 2000, Direction = ParameterDirection.Output });


热忱回答6

  • var p=new SugarParameter("@p",value);
    p.IsArray=true;

    上面是数组参数用法


     

    0 回复
  • 如果是oupput可以这样

    p.Direction = System.Data.ParameterDirection.Output;

    0 回复
  • @fate sta:试过了,会报错:System.InvalidOperationException: 'OracleParameter.ArrayBindSize is invalid'

    0 回复
  • 写个简单一个参数存储过程,你ADO.NET能跑的我给你转成sqlsugar能跑的。

    0 回复
  • parameter.CustomDbType=OracleType.xxx

    还有这个属性要指定oracle类型

    0 回复
  • @fate sta:加上这个就可以了,多谢!CustomDbType=OracleDbType.xxx

    0 回复