问题描述
存储过程在plsql下调试没问题。但是c#执行就报参数或类型不对,麻烦各位帮检查一下。存储过程代码CREATEORREPLACETYPEARR_IDSISTABLEOFNUMBER;CREATEORREPLACEPROCEDUREGET_TESTS(P_IDSINARR_IDS)ASV_IDSARR_IDS:=ARR_IDS();BEGINV_IDS.EXTEND(P_IDS.COUNT);FORiINP_IDS.FIRST..P_IDS.LASTLOOPV_IDS(i):=P_IDS(i);ENDLOOP;END;C#代码conn.Open();OracleCommandcommand=conn.CreateCommand();command.CommandType=CommandType.StoredProcedure;command.CommandText="GET_TESTS";command.Parameters.Add("P_IDS",OracleDbType.Int16,newInt16[]{1,2,3},ParameterDirection.Input);command.Parameters["P_IDS"].CollectionType=OracleCollectionType.PLSQLAssociativeArray;command.ExecuteNonQuery();
解决方案
解决方案二:
你给的参数是批量执行用的,ODP.NET就不支持自定义类型作为参数传递,更何况你定义的那个变量是输入型参数,而不是输出型,只能在PL/SQL里面使用,无法在.NET里面被调用。
解决方案三:
你在oracle定义是NUMBER,你在c#传的却是数组,这当然不行的
解决方案四:
CREATEORREPLACETYPEARR_IDSISTABLEOFNUMBER;你在C#里把一个数组传给NUMBER?
解决方案五:
引用2楼u011130289的回复:
你在oracle定义是NUMBER,你在c#传的却是数组,这当然不行的
引用3楼iloli的回复:
CREATEORREPLACETYPEARR_IDSISTABLEOFNUMBER;你在C#里把一个数组传给NUMBER?
你们两个会Oracle自定义类型吗?再仔细看看,命名是自定义了一个表对象,居然说是NUMBER。CREATEORREPLACETYPEARR_IDSISTABLEOFNUMBER;我都说了是不支持自定义类型了,真不懂怎么还来乱说。
解决方案六:
引用4楼qldsrx的回复:
Quote: 引用2楼u011130289的回复:
你在oracle定义是NUMBER,你在c#传的却是数组,这当然不行的引用3楼iloli的回复:
CREATEORREPLACETYPEARR_IDSISTABLEOFNUMBER;你在C#里把一个数组传给NUMBER?你们两个会Oracle自定义类型吗?再仔细看看,命名是自定义了一个表对象,居然说是NUMBER。CREATEORREPLACETYPEARR_IDSISTABLEOFNUMBER;我都说了是不支持自定义类型了,真不懂怎么还来乱说。
http://www.cnblogs.com/KissKnife/archive/2011/04/21/2023472.html
解决方案七:
引用5楼u011130289的回复:
http://www.cnblogs.com/KissKnife/archive/2011/04/21/2023472.html
这么写还不累死人啊,单单可迁移性就消失了,我宁可重新封装一个简单调用的存储过程,那样就可以用我的通用数据库操作类快速编程了。
解决方案八:
OracleDbType我怎么找不到,还是用字符串传入吧
解决方案九:
楼主解决了没?分享下吧,我也遇到这个问题
解决方案十:
存储过程的参数是number,你传个数组过去干嘛...