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

Импорт Хранимой Процедуры из Oracle XE в Delphi: Проблема с Типами Данных

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

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

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

Пользователь столкнулся с проблемой, когда при импорте хранимой процедуры из Oracle XE 11g в Delphi XE2, параметры, содержащие целые числа, отображались в компоненте tSQLStoredProc как ftFMTBcd, вместо ожидаемого ftInteger. Это приводило к ошибке ORA-05602 при вызове процедуры, если параметры были объявлены как IN. При этом, если параметры были объявлены как OUT, передача данных происходила корректно.

Проблема заключалась в том, что сервер Datasnap не мог корректно преобразовать поле ftFMTBcd в целое число и отправлял в Oracle пустую строку вместо ожидаемого числа или числа с плавающей точкой.

Пример кода хранимой процедуры

CREATE TABLE achristo_adm.paalogget(
    paaloggetID       NUMBER(38, 0)    NOT NULL,
    utstyrID          NUMBER(38, 0),
    BrukerID          NUMBER(38, 0),
    sist_paalogget    TIMESTAMP(6),
    CONSTRAINT PK22 PRIMARY KEY (paaloggetID)
    USING INDEX
        LOGGING)
    LOGGING;

PROCEDURE registrer_paalogget(
    FUTSTYRID       IN INTEGER,
    FBRUKERID       IN INTEGER,
    FSIST_PAALOGGET IN TIMESTAMP,
    fpaaloggetID OUT INTEGER) AS paaloggetC hl_recur_typ;
BEGIN
    -- Код процедуры
END registrer_paalogget;

Потенциальные решения проблемы

  1. Изменить параметры соединения TSQLConnection перед его использованием, добавив следующие строки в обработчик события AfterConnect: pascal SQLConnection.Params.Values['EnableBCD'] := 'true'; SQLConnection.Params.Values['IntegerPrecision']:= '10'; Также можно изменить типы параметров хранимой процедуры с INTEGER на NUMBER(10,0).

  2. Переписать все методы хранимой процедуры так, чтобы использовать строки в качестве параметров, а затем преобразовывать их в целые числа перед вызовом оригинальной процедуры.

  3. Использовать тип данных NUMBER(19, 0) в Oracle, что соответствует BIGINT, вместо NUMBER(38, 0), который в реальности представляет собой 128-битное целое, не поддерживаемое в 32-битной версии Delphi.

  4. Убедиться, что все файлы клиента Oracle (oci.dll и т.д.) являются последними версиями и не используются устаревшие версии из установки сервера.

Подтвержденное решение

Проблема может быть связана с использованием устаревших файлов клиента Oracle, которые активируются из-за неправильного указания пути к исполняемому файлу сервера Oracle. Убедитесь, что все файлы клиента Oracle обновлены до последней версии.

Заключение

При работе с импортом хранимой процедуры из Oracle в Delphi важно тщательно проверять типы данных и параметры соединения. В случае возникновения проблем, рекомендуется обратить внимание на версии клиентских библиотек Oracle и правильность их конфигурации.

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

Пользователь столкнулся с проблемой несоответствия типов данных при импорте хранимой процедуры из Oracle XE в Delphi XE2, что вызывало ошибку при выполнении процедуры.


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

Получайте свежие новости и обновления по 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 00:50:56/0.0031349658966064/0