调用返回行/记录的Sql函数

时间:2019-03-04 06:12:43

标签: c# sql .net oracle oracle-manageddataaccess

数据库端

我有一个简单的程序包,其中包含一个自定义数据类型GENERIC_API_PKG.DETAILS_ROW和一个函数GENERIC_API_PKG.GET_DETAILS_BY_ID,该函数接受一个varchar2参数并返回此自定义数据类型,我已经使用sql编辑器测试了其功能并且它可以正常工作,如下所示:

function test

应用程序端

我正试图通过按此答案https://stackoverflow.com/a/47174135/932628的建议用Begin / End块包装它来调用GET_DETAILS_BY_ID(:id)函数,但是我一直收到类似于以下错误:

  

在发现....时发现符号“>”等

我尝试了与以前的建议类似的多种变体,但是我无法成功调用该函数,并且不断收到相同的错误消息。

以下是我根据此答案https://stackoverflow.com/a/23200322/932628

所建议尝试的最终方案
{

            var oc = GetConnectionObject();
            PersonDetailsEntity entity = new PersonDetailsEntity(){};

            try
            {
                oc.Open();

                var cm = GetCommandObject(Commands.Get_PersonDetails, oc);
                cm.CommandType = System.Data.CommandType.StoredProcedure;

                var prmIdReq = GetVarcharParam(Params.Id, id, true);

                //////////////////////////////////////////////////////
                cm.Parameters.Add(prmIdReq);
                cm.Parameters.Add("V_REZ", OracleDbType.RefCursor, System.Data.ParameterDirection.ReturnValue);

                var x = cm.ExecuteNonQuery();

                //if (x.Read())
                //{
                //    entity = QcbModelEntity.PersonDetails.Mapper.MapReaderToEntity(x);
                //    entity.IsFound = true;
                //}
                //////////////////////////////////////////////////////

                oc.Close();
                oc.Dispose();

                return entity;
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }

Commands.Get_PersonDetails是设置为const string的{​​{1}},GENERIC_API_PKG.GET_DETAILSBY_ID(:Id)也是设置为Params.Id的{​​{1}}的情况下, const string是我返回的databse函数中自定义类型Id的变量的名称

当我尝试执行此操作时,出现以下错误:

  

ORA-01008并非所有变量都已绑定

任何建议,请提出建议

0 个答案:

没有答案