![](/img/trans.png)
[英]Pass value of user-defined type as input parameter to stored procedure in Oracle from C#
[英]Pass table-type object as input parameter to Stored Procedure in Oracle from C#
我有接受表类型作为输入参数的存储过程。 如何从c#代码传递对象?
create or replace TYPE CUSTOM_TYPE AS OBJECT
(
attribute1 VARCHAR(10),
attribute2 VARCHAR(10)
);
create or replace TYPE CUSTOM_TYPE_ARRAY AS TABLE OF CUSTOM_TYPE;
PROCEDURE SP_TEST
(
P_TABLE_IN IN CUSTOM_TYPE_ARRAY,
P_RESULT_OUT OUT SYS_REFCURSOR
) AS
BEGIN
OPEN P_RESULT_OUT FOR
SELECT ti.attribute1, ti.attribute2, ti.attribute3
FROM TABLE(P_TABLE_IN) ea inner join MYTABLE ti on ea.attribute1 = ti.attribute1 and ea.attribute2 = ti.attribute2;
END SP_TEST;
并尝试添加如下参数:
var oracleParam = new OracleParameter();
oracleParam.OracleDbType = OracleDbType.Array;
oracleParam.Direction = ParameterDirection.Input;
oracleParam.ParameterName = "P_TABLE_IN";
oracleParam.Value = entities;
oracleCommand.Parameters.Add(oracleParam);
其中实体是自定义实体集合的实例(具有已定义的oracle属性映射)
public class EntityUdt
{
[OracleObjectMappingAttribute("attribute1")]
public string attribute1 {get;set;}
[OracleObjectMappingAttribute("attribute2")]
public string attribute2 {get;set;}
}
我按照本指南正确定义了.net实体,但通过我的列表仍然没有运气:
用户代码未处理System.InvalidOperationException
的HResult = -2146233079
Message ='EntityUdt :: attribute1 :: OracleObjectMappingAttribute'不能设置为'attribute1'的无效值
Source = Oracle.DataAccess StackTrace:at Oracle.DataAccess.Types.OracleUdtDescriptor.DescribeCustomType(Object customTypeFactory)
我花了好几个小时试图找出问题,结果发现oracle属性定义的映射应该具有与属性名称不同的名称。
所以我只是将所有的映射属性都设置为大写,现在就可以了!
[OracleObjectMappingAttribute("ATTRIBUTE1")]
public string attribute1 { get; set; }
[OracleObjectMappingAttribute("ATTRIBUTE2")]
public string attribute2 { get; set; }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.