Форум: "Базы";
Текущий архив: 2007.07.08;
Скачать: [xml.tar.bz2];
ВнизНе возвращается ptOutput параметра TQuery Найти похожие ветки
← →
Hydroliskus (2007-04-06 14:43) [0]Использую BDE при работе с ораклом.
Запускаю функцию, находящуюся в пакете. TStoredProc выдает Access violation, поэтому использую TRxQuery.
TRxQuery отрабатывает запрос, содержащий функцию, т е функция срабатывает, но не записывается результирующее значение в Params
Запрос:
BEGIN
:ID ::= UPDATE_VALUES.ADD_VALUE(....);
END;
Описание функции в пакете:
FUNCTION ADD_VALUE(....) RETURN NUMBER;
Значения полей параметра ID:
DATATYPE = ftInteger
ParamType = ptOutput
Поможите, люди добрые ))
Заранее благодарен.
← →
Desdechado © (2007-04-06 15:17) [1]> RETURN NUMBER;
> DATATYPE = ftInteger
Что-то мне говорит, что такая комбинация неживая.
NUMBER - это, скорее, Double.
Да и вызывать функцию проще так:SELECT UPDATE_VALUES.ADD_VALUE(....) FROM Dual
Тогда никаких параметров на выход не надо, только входные.
← →
Hydroliskus (2007-04-06 15:27) [2]>Да и вызывать функцию проще так:
>SELECT UPDATE_VALUES.ADD_VALUE(....) FROM Dual
>Тогда никаких параметров на выход не надо, только входные.
там ID генерится сиквенсом и нужно его получить
← →
ANB © (2007-04-06 15:31) [3]
> TStoredProc выдает Access violation
С чего это вдруг ?
А чтобы параметры вертались из квери, желательно поискать свойство типа ReturnParam.
С компонентами типа TStoredProc такие проблемы почти не возникают.
← →
Sergey13 © (2007-04-06 15:32) [4]> там ID генерится сиквенсом и нужно его получить
И нафига на это пакетную функцию? Фраза RETURNING в INSERT-запросе решает эту "проблему" на раз.
← →
Hydroliskus (2007-04-06 15:58) [5]А как TStoredProc вызывает пакетную функцию ?
->StoredProcName = "<Имя пакета>.<Имя функции>" ?
>А чтобы параметры вертались из квери, желательно поискать свойство >типа ReturnParam.
У параметра есть свойство ParamType. Насколько я понял, если выводится результирующее значение, то ParamType = ptResult. Не помогает (((
>И нафига на это пакетную функцию? Фраза RETURNING в INSERT-запросе >решает эту "проблему" на раз
Дополняю чужую прогу. В базе функции пакетные. Приходится с ними возиться).
← →
Val © (2007-04-06 17:51) [6]1. показывай код со stored proc. у меня не выдает access violation.
2. если используешь квери - запрос из dual, как уже говорили. после выполнения id := Q.Params[0].AsInteger или Q.ParamByName("Result").AsInteger
← →
Val © (2007-04-06 18:10) [7]по поводу 2. - параметр result не пройдет. мысли разбежались, он к первому пункту.
← →
Desdechado © (2007-04-06 18:14) [8]Val © (06.04.07 17:51) [6]
Если в функции выболняется изменение данных, то из нее сделать SELECT нельзя без использования AUTONOMOUS_TRANSACTION, но оно чревато...
Да и результат будет не в Params[0], а в Fields[0]
← →
Val © (2007-04-06 18:50) [9]>[8] Desdechado © (06.04.07 18:14)
согласен.
← →
Hydroliskus (2007-04-06 18:58) [10]>показывай код со stored proc. у меня не выдает access violation.
spResult->StoredProcName = "UPDATE_VALUES.ADD_VALUE(....) ";
spResult->ExecProc(); //Access Violation
Не обратил внимания, что на этапе дизайна при присвоении полю StoredProcName величины UPDATE_VALUES.ADD_VALUE и установки Active в True, происходит тоже Access Violation
Получаетя, что storedproc не видит этой функции... Может я её неправильно прописал в StoredProcName ?
UPDATE_VALUES - имя пакета
ADD_VALUE - имя функции
← →
Hydroliskus (2007-04-06 19:04) [11]не правильно написал, код такой:
spResult->StoredProcName = "UPDATE_VALUES.ADD_VALUE";
spResult->ExecProc(); //Access Violation
← →
Val © (2007-04-06 19:25) [12]spResult - это компонент брошенный на форму?
← →
Hydroliskus (2007-04-06 19:55) [13]>spResult - это компонент брошенный на форму?
да, TStoredProc* spResult ;
← →
Val © (2007-04-06 22:51) [14]компонент проинициализирован? базу данных указал? параметры передал? препарировал?
← →
Hydroliskus (2007-04-07 01:11) [15]>компонент проинициализирован? базу данных указал? параметры передал? препарировал?
Все сделал. Когда пытаюсь функцию назначить, выдает список процедур, но не видит ту, которая мне нужна
Затем просто записал в этом поле имя функции. Когда попытался задать параметры, то выскочил Access violation (все происходит на этапе дизайна)
Может пакетные функции по-другому передаются ?...
>Если в функции выболняется изменение данных, то из нее сделать SELECT
Получается, что единственно возможный способ работы с такими функциями - TStoredProc ?
← →
Val © (2007-04-07 15:18) [16]проблем с правами на пакет нет?
← →
ANB © (2007-04-09 13:18) [17]
> Получается, что единственно возможный способ работы с такими
> функциями - TStoredProc ?
Не единственный, но самый безгеморройный.
А также, ИМХО - через BDE с ораклом работать жутко неудобно и возможны глюки.
← →
Hydroliskus (2007-04-09 18:08) [18]
> проблем с правами на пакет нет?
Из PL SQL Developer-e функции запускаются, квери тоже запускает, только вот с возвратом параметров проблема
← →
Hydroliskus (2007-04-09 18:30) [19]2Val Подскажи, плз, какой синтаксис для вызова пакетных функций из TStoredProc, может я синтаксис напутал, поэтому и access violation.
← →
Val © (2007-04-10 10:51) [20]да никаких хитростей. storedprоcname := "ИМЯ_ПАКЕТА.ИМЯ_ПРОЦЕДУРЫ" и все отличия от вызова обычных процедур.
← →
Hydroliskus (2007-04-10 19:30) [21]2Val спасибо за помощь
написал хранимые процедуры, соответствующие логике работы пакетных функций, все нормально отработало.
Причины траблы с пакетами остались загадкой)
← →
Val © (2007-04-11 10:25) [22]да не за что, собственно..
>написал .. соответствующие ..
хранимые просто как обертки пакетных пробовал? что-то мне про права все-же думается.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2007.07.08;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.05 c