Я попытался выполнить поиск и не нашел однозначного ответа на свой вопрос.Я делаю переход с SQL Server на Oracle, но все еще использую C # для внешнего интерфейса.Я использую ODP.Net.У меня есть хранимый процесс в Oracle, например:
Create or Replace
Procedure GetFoo
(cur_z OUT sys_refcursor,
pub_date IN varchar2,
fname IN varchar2 default null,
lname IN varchar2 default null,
phone IN varchar2 default null
)
IS
BEGIN
---get some data
END;
fname, lname и phone являются необязательными параметрами.В моем коде C # я установил OracleCommand.BindByName = true, который я прочитал, должен позволить мне исключить отправку любых параметров, в которых нет значений для отправки. Например, мне просто нужно отправить курсор, pub_dateи телефон для поиска записи, которая соответствует только номеру телефона.Тем не менее, при вызове этого из C #, хотя и только добавляя параметры для курсора, pub_date и phone, я продолжаю получать сообщение об ошибке: «неправильный номер или типы аргументов при вызове GetFoo». Затем, если я отправлю курсор, pub_date иFname и оставляя пустым, я получаю результаты, и все работает хорошо. Кажется, что вы не можете пропустить какие-либо параметры независимо от настройки BindByName. Если это правильное поведение, то я могу обойти это, но это немного странно (хорошохотя бы из моего опыта работы с SQL Server), и я хочу убедиться, что я что-то не пропустил.
Спасибо.