Сторона базы данных
У меня есть простой пакет, который содержит пользовательский тип данных GENERIC_API_PKG.DETAILS_ROW
и функцию GENERIC_API_PKG.GET_DETAILS_BY_ID
, которая принимает параметр varchar2
и возвращает этот пользовательский тип данных,Я проверил его функциональность с помощью редактора sql, и он работает нормально, как показано ниже:
Сторона приложения
Я пытался вызвать GET_DETAILS_BY_ID(:id)
функцию, обернув ее блоком «Начало / Конец», как предлагается в этом ответе: https://stackoverflow.com/a/47174135/932628, но я продолжаю получать сообщение об ошибке, похожее на это:
Найденосимвол «>» при ожидании .... и т. д.
Я пробовал несколько вариантов, аналогичных предыдущему предложению, но мне не удалось успешно вызвать функцию, и я продолжаю получать одно и то же сообщение об ошибке.
Ниже приведен последний сценарий, который я пробовал, как предлагается в этом ответе 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
, для которого установлено GENERIC_API_PKG.GET_DETAILSBY_ID(:Id)
, Params.Id
также является const string
, для которого установлено значение Id
, а V_REZ
является именем of переменная пользовательского типа GENERIC_API_PKG.DETAILS_ROW
внутри моей функции базы данных, которую она возвращает
Когда я пытаюсь выполнить это, я получаю следующую ошибку:
ORA-01008 не все переменныепереплет
Любые предложения, пожалуйста, сообщите