Вызвать функцию Sql, которая возвращает строку / запись - PullRequest
0 голосов
/ 04 марта 2019

Сторона базы данных

У меня есть простой пакет, который содержит пользовательский тип данных GENERIC_API_PKG.DETAILS_ROW и функцию GENERIC_API_PKG.GET_DETAILS_BY_ID, которая принимает параметр varchar2 и возвращает этот пользовательский тип данных,Я проверил его функциональность с помощью редактора sql, и он работает нормально, как показано ниже:

function test

Сторона приложения

Я пытался вызвать 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 не все переменныепереплет

Любые предложения, пожалуйста, сообщите

...