Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Как обойти ошибку ORA-01036 в Delphi с FireDAC для Oracle Database

Delphi , Базы данных , Oracle

При работе с базами данных Oracle и использовании компонентов FireDAC в среде разработки Delphi, пользователи могут столкнуться с ошибкой ORA-01036, которая возникает при попытке выполнения хранимой процедуры с параметрами, имеющими имена более 30 символов. Это происходит, потому что по умолчанию FireDAC ограничивает длину имен параметров именно этим значением.

Описание проблемы

В вашем случае используется версия Oracle 19.3.0, которая поддерживает имена параметров длиной более 30 символов. Однако, при вызове хранимой процедуры через компонент FireDAC ExecProc в Delphi, возникает исключение ORA-01036 : illegal Variable name/number, и выполнение процедуры прерывается, так как одно из имен параметров превышает 30 символов. Вы ищете способ изменить это поведение без изменения длины имен параметров.

Подтвержденный ответ

Пользователь нашел решение проблемы, связавшись со службой поддержки Embarcadero. Предложенный способ заключается в изменении режима привязки параметров с pbByName на pbByNumber. Это позволяет избежать ограничения по длине имен параметров, установленного в FireDAC.

Альтернативный ответ и комментарии

В комментариях обсуждается, что ошибка ORA-01036 исходит от Oracle, а не от Delphi. Также упоминается, что с версии Oracle 12.2 поддерживаются имена переменных длиной до 128 байт, но многие администраторы баз данных не спешат включать эту функциональность. В коде FireDAC.Phys.Oracle обнаружено условие, которое сокращает длину имен параметров, если они превышают 30 символов. Предполагается, что FireDAC не был обновлен для полной поддержки более длинных имен, что было введено в Oracle 12.2.

Пример кода

procedure TForm5.Button1Click(Sender: TObject);
begin
    FDStoredProc1.ParamBindMode := pbByNumber;
    FDStoredProc1.FetchOptions.Items := [fiBlobs, fiDetails]; // Отключает автоматическую выборку параметров с сервера
    FDStoredProc1.Params.CreateParam(ftString, 'Averylongparamternamethathopefullyislongerthanthirtycharacters', ptInput);
    FDStoredProc1.Params.CreateParam(ftString, 'outparam', ptOutput);
    FDStoredProc1.Params[0].AsString := 'Hello World';  

    FDStoredProc1.ExecProc; 

    ShowMessage(FDStoredProc1.Params[1].AsString);
end;

Выводы

Чтобы обойти ограничение по длине имен параметров в FireDAC для Oracle, необходимо использовать режим привязки параметров pbByNumber вместо pbByName. Это позволит избежать ошибки ORA-01036, не изменяя длину имен параметров в вашем коде.

Обратите внимание, что данный подход может потребовать дополнительной настройки вашего приложения, так как вы будете работать с параметрами по их номерам, а не по именам. Убедитесь, что порядок параметров в хранимой процедуре соответствует порядку их создания в коде Delphi.

Создано по материалам из источника по ссылке.

При работе с FireDAC в Delphi для Oracle Database возникла ошибка ORA-01036, связанная с превышением длины имен параметров, и ищется способ её обхода через изменение режима привязки параметров.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Oracle ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 08:55:53/0.0059139728546143/0