![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Возврат данных (не набора) из ХП [D7, Oracle 9.2.0.1]
Вольный Стрелок © (2005-05-24 16:41:00)ХП отрабатывает, в трассировке вижу, что OUT-параметрам данные присваиваются.
При обращении к ХП через dbExpress в OUT-параметре ничего нет.
ХП возвращает не набор данных, а просто единичное значение (придуманный мной код успешности выполнения).
Использую драйвер DBEXPODA версии 2.05
Как узнать, что же вернула ХП?
При работе с FB все прекрасно возвращалось.
Val (2005-05-25 17:49:00) [1]1-3 Это ваше многое - попросту нестрогая типизация.
Заменили на варчар и что - вернулся результат?
Вольный Стрелок (2005-05-25 17:27:00) [2]> что не логично и что не понятно?
Да многое нелогично и непонятно в Оракле.
1. пример с пропаданием типа в UNION я привел
2. неясно, почему нельзя указать размер CHAR/VARCHAR/NUMBER в параметрах ХП
3. неясно, почему при возвращении из ХП набора данных с определенной структурой рекордов опять все явно описанные в типе рекорда поля NUMBER(x,y) кастрируются до NUMBER без точности
приходится полный изврат творить, чтоб это обойти...
> замени на varchar2
так и сделал, но ведь все равно полумера, а?
ANB (2005-05-25 10:30:00) [3]
> В ХП OUT-параметр определен как CHAR
- замени на varchar2. Char и должен так вернуть.
Val (2005-05-25 10:27:00) [4]:) что не логично и что не понятно?
Вольный Стрелок (2005-05-24 21:29:00) [5]> потому что так сделано
Очень логичное объяснение... главное - понятное.
Также, как и доведение всех NUMBER(x,y) полей до NUMBER без точности при использовании UNION - смысл в чем?
DataType для параметра указать можно. А как он повлияет на возвращаемое значение?
Val (2005-05-24 18:55:00) [6]>[8] Вольный Стрелок © (24.05.05 18:02)
1.судя по всему - максимальная длина для данного типа в данной версии сервера.
2. потому что так сделано. создайте свой тип с размерностью и указывайте его, или через%type для полей таблиц/просмотров.
3. попробуйте сделать пл/скл блок с вызовом этой процедуры - значение возвращается?
4. в данных компонентах не указывается DataType для параметров?
Вольный Стрелок (2005-05-24 18:02:00) [7]В отладчике прошелся и опупел - длина результата в параметре 4001 символ.
В ХП OUT-параметр определен как CHAR (указание длины в ХП почему-то не катит - почему, кстати?), поэтому все дополняется пробелами. Но откуда 4001? И почему оно не круглое?
ANB (2005-05-24 17:44:00) [8]А у меня на восьмерке работает, только что проверил.
Попробуй в отладчике посмотреть, что лежит в Params.
Вольный Стрелок (2005-05-24 17:42:00) [9]пробовал перед ExecSQL ставить
ParamByName( 'LRET' ).ParamType := ptOutput; //ptResult;
- эффект отсутствует для обоих вариантов
ANB (2005-05-24 17:33:00) [10]
> Что именно?
Params[i].ParamType. Я вообще то ODAC юзаю, там если четко не указать, что нужно вертать параметры, то ничего не вертается.
Вольный Стрелок (2005-05-24 17:17:00) [11]Выглядит так, и в FB так работает:
with( qry )do begin
CommandType := ctStoredProc;
CommandText := 'PR_REPLACENAME';
ParamByName( 'CNAMEOLD' ).AsString := qryTerm.FieldByName( 'term_name' ).AsString;
ParamByName( 'CNAMENEW' ).AsString := '';
ExecSQL;
lOk := ParamByName( 'LRET' ).AsString = 'T';
end;
Полагаю, что механизм dbExpress должен скрывать особенности реализации отдельных SQL-серверов. Поэтому думал, что и в Oracle должно прокатить, ан нет...
2 evvcom
Где взять патч? У меня Oracle Developers Edition, а с логином от OTN на METALINK с патчами не пускают :(
2 ANB
Что именно?
Sergey13 (2005-05-24 17:08:00) [12]>При обращении к ХП через dbExpress в OUT-параметре ничего нет.
А после обращения? Как это вообще выглядит?
evvcom (2005-05-24 17:02:00) [13]и не в тему: Oracle пропатчь, а то нарвешься еще на другие неприятности, потеряешь денек-другой.
ANB (2005-05-24 16:43:00) [14]А Params настраивал ?