HowtocallanOraclestoredprocedurethatreturnsarefcursor我正在尝试调用返回引用游标的Oracle存储过程,我需要从返回的数据生成树视图。我对此很陌生,我有两个问题。第一个问题是我无法调用该程序。我收到此错误:“调用‘OBJECT_HIERARCHY’时参数的数量或类型错误”我的第二个问题是,我不明白此过程何时返回引用游标值,我将如何获取该数据?该表中有超过5000条记录,我没有得到该数据,而是得到了一个refcursor值。有人可以向我解释如何使用refcursor值获取该数据。我没有使用Oracle的经验。这是oracle中的过程定义:CREATEORREPLACEPROCEDURESAD.object_hierarchy(nAppIdINNUMBER,nParentIdINNUMBERDEFAULT-1,o_cRefCursorOUTSYS_REFCURSOR)ISBEGINIFNOTo_cRefCursor%ISOPENTHENOPENo_cRefCursor_FORSELECTID,h.PARENTID,h.PARENTID,h.H_LEVEL,o.OBJECT_IDENTIFIER,o.OBJECT_TYPE_IDFROM(SELECTPARENT_ID,CHILD_ID,LEVELASH_LEVELFROMOBJECT_RELATIONSHIPSSTARTWITHPARENT_ID=nParentId-->-1--=60170CONNECTBYPRIORCHILD_ID=PARENT_ID)hINNERJOINOBJECTSO对象在o.OBJECT_ID=h.CHILD_ID和O.APPLICATION_ID=nAppId上;万一;结束对象层次结构;这些是表字段定义ColumnNameDataTypeOBJECT_REL_IDNUMBER(14)PARENT_IDNUMBER(14)CHILD_IDNUMBER(14)OBJECT_IDENTIFIERVARCHAR2(255Byte)OBJECT_TYPE_IDVARCHAR2(5Byte)这是:我的代码数据源=返回=(DESCRIPTION="+"(ADDRESS=(PROTOCOL=TCP)(HOST=tnt33)(PORT=1521))"+"(CONNECT_DATA=(SERVICE_NAME=ORCL)));"+"用户名=xxx;密码=xxxxx;";OracleConnectioncon=new甲骨文连接(oradb);尝试{con.Open();OracleCommandcmd=newOracleCommand();cmd.Connection=con;cmd.CommandType=System.Data.CommandType.StoredProcedure;cmd.CommandText="SAD.object_hierarchy";cmd.Parameters.Add("nAppId",OracleDbType.Int16).Value=1;OracleParameteroraP=newOracleParameter();oraP.OracleDbType=OracleDbType.RefCursor;oraP.Direction=System.Data.ParameterDirection.Output;命令。参数。添加(oraP);OracleDataReader阅读器=cmd.ExecuteReader();while(reader.Read()){}reader.Close();}catch(Exceptionex){con.Close();我解释了为什么我的代码返回这个错误:“Wrongnumberortypesofargumentsincallto'OBJECT_HIERARCHY'”如果你要提供OUT,你还需要提供nParentId,因为.NET在语句是发送到服务器cmd.Parameters.Add("nParentId",OracleDbType.Int16).Value=-1;示例:以上是C#学习教程:如何调用返回引用游标的Oracle存储过程。如果对大家有用,需要详细了解C#学习教程,希望大家多多关注—stringconnStr="DataSource=datasource;PersistSecurityInfo=True;UserID=user;Password=pass;Unicode=真的”;DataSet数据集=newDataSet();stringconnStr=ConfigurationManager.ConnectionStrings["OracleConn"].ToString();使用(OracleConnectionobjConn=newOracleConnection(connStr)){OracleCommandobjCmd=newOracleCommand();objCmd.Connection=objConn;objCmd.CommandText="Oracle_PkrName.Stored_Proc_Name";objCmd.CommandType=CommandType.StoredProcedure;objCmd.Parameters.Add("Emp_id",OracleType.Int32).Value=3;//输入idobjCmd.Parameters.Add("Emp_out",OracleType.Cursor).Direction=ParameterDirection.Output;尝试{objConn.Open();objCmd.ExecuteNonQuery();OracleDataAdapterda=newOracleDataAdapter(objCmd);da.Fill(数据集);}catch(Exceptionex){System.Console.WriteLine("Exception:{0}",ex.ToString());}objConn.Close();}本文搜集自网络,不代表立场,如涉及侵权,请点击右侧联系管理员删除,如需转载请注明出处:
