Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.30;
Скачать: CL | DM;

Вниз

ODBC и хранимые функции   Найти похожие ветки 

 
Внук ©   (2004-05-07 15:53) [0]

Приветствую!
Такой вопрос: удавалось ли кому-нибудь успешно вызвать хранимую функцию Oracle через ODBC-подключение? С хранимыми процедурами проблем нет.


 
Курдль ©   (2004-05-07 16:07) [1]

Занефиг делать. Через компоненты SQL Direct.


 
Курдль ©   (2004-05-07 16:09) [2]

А сорри! Не врубился сперва в самую суть. Что, надо чтобы возвращала набор данных?


 
Внук ©   (2004-05-07 16:14) [3]

Нет. Надо просто вернуть одно значение типа Number. Но через ODBC. Если у кого был такой опыт, буду благодарен за краткое пояснение. Через стандартную связку BDE-ODBC не работает, хотя просто через BDE идет без проблем.


 
Vlad ©   (2004-05-07 16:17) [4]


> Внук ©   (07.05.04 16:14) [3]

Только что пробовал BDE-Odbc. Все работает.
Правда хранимая функция дату возвращает

> Через стандартную связку BDE-ODBC не работает

И что говорит ?


 
Внук ©   (2004-05-07 16:21) [5]

>>Vlad ©   (07.05.04 16:17) [4]
 При методе передачи параметров по имени говорит "Syntax error or access violation", а по индексу - "Invalid variable name/number". Да, забыл сказать, что использую TStoredProc, но это не принципиальное требование, можно от него отказаться.
 Может, дело в самом драйвере? Пробовал родной от Oracle и от MS. Без толку.


 
Внук ©   (2004-05-07 16:23) [6]

Упс. Еще дополнение - Oracle 8i. Есть подозрения, что в девятке этой проблемы нет.


 
Vlad ©   (2004-05-07 16:25) [7]


> Внук ©   (07.05.04 16:21) [5]

Возьми обычный БДЕ-шный SQL-Explorer
и напиши запрос
select YourFunction(<параметры>) as SomeField from dual
Сработает ?


 
Reindeer Moss Eater ©   (2004-05-07 16:34) [8]

Вызвать процедуру - не проблема.
Любой query понимабющий begin end поможет
begin
MY_PROC(:MY_PARAM);
end;

А вот получить значение OUT параметра получалось исключительно при использовании TStoredProc (если говорить про вкладку BDE).
А он при использовании ODBC ругается на "опс нот апликабл"

Все это и на 8i и на 9i.


 
Vlad ©   (2004-05-07 16:40) [9]


> Внук ©   (07.05.04 16:23) [6]

Кстати говоря только что попробовал сделать вызов через TQuery
Все сработало, параметры присваивал как через ParamByName, так и через Params[]
Правда Оракл-сервер девятый, но клиент восьмой стоит, так что...


 
Внук ©   (2004-05-07 16:44) [10]

>>Vlad ©   (07.05.04 16:25) [7]
 Да, так работает. Спасибо за идею. Можно ведь через TQuery. Я зациклился на TStoredProc. Но почему ОН не работает, не понятно.
>>Reindeer Moss Eater ©   (07.05.04 16:34) [8]
 Да, у меня тоже OUT параметры. И через TStoredProc все нормально. Если процедура. А вот для функции - никак.

Из все этого можно сделать вывод, что сам драйвер поддерживает и процедуры, и функции. Вобщем-то, это самое главное. С деталями реализации теперь разберусь. Потому что BDE мне, вообще говоря, не нужно. Это я тестирую на нем. А применяться будет это на Visual FoxPro.

Всем спасибо !


 
Vlad ©   (2004-05-07 17:07) [11]

Да, видимо TStoredProc не предназначена для работы с функциями.
Попробовал ради интереса.
Если возвращаемый параметр описать как ptResult, то возникает ошибка Operation not Applicable, да и в справке про этот тип параметра сказано как-то размыто. Вобщем не для этого он.


 
Vlad ©   (2004-05-07 17:35) [12]


> Vlad ©   (07.05.04 17:07) [11]

Упс...ошибся. Действительно, если использовать БДЕ-шный драйвер,то значение в параметр ptResult возвращается нормально, а вот ODBC на тоже самое ругается...


 
Внук ©   (2004-05-07 18:01) [13]

>>Vlad ©   (07.05.04 17:35) [12]
 Угу. Склонен рассматривать это как некоторую кривость стандартных VCL-компонент. Но это уже не беда, это просто досадное недоразумение :))


 
Vlad ©   (2004-05-07 18:08) [14]


> Внук ©   (07.05.04 18:01) [13]

Я тут посмотрел SQL монитором запросы, отсылаемые на сервер.
В случае с BDE драйвером и TStoredProc формируется нормальный запрос:
begin
:param1 = MyFunc(:param2)
end;
Если же использовать ODBC драйвер, то никакого запроса вобще не формируется.
Так что виноват скорее сам TStoredProc, видимо он не заточен под ODBC драйвер.


 
Внук ©   (2004-05-07 20:33) [15]

Вот и я говорю, VCL-компоненты. Легко отделался :))


 
Курдль ©   (2004-05-07 23:23) [16]

Значицца так! Нефиг на зеркало пенять... ODBC - классная весчь!
Вот рабочий пример (Oracle 8 + ODBC + SQL Direct)

Функция:
create or replace function TestOraODBC return integer is
 Result integer;
begin
 Result := 123;
 return(Result);
end TestOraODBC;


Вызов:

procedure TForm1.FormCreate(Sender: TObject);
begin
 SDDatabase1.Open;
 SDStoredProc1.ExecProc;
 Label1.Caption := SDStoredProc1.Params[0].AsString;
end;


Скриншот: 123  :)


 
Vlad ©   (2004-05-08 16:18) [17]


> Курдль ©   (07.05.04 23:23) [16]

Ты это... ветку читал или нет?
Давно уже поняли что дело не в самом драйвере ODBC, а в VCL. И причем тут SQL Direct, если речь о глюках TStoredProc


 
Внук ©   (2004-05-08 20:49) [18]

>>Курдль ©   (07.05.04 23:23) [16]
 Насчет SQL Direct - спасибо, возможно, на будущее пригодится. Хотя упаси меня Control, Shift и святой Delete работать из под Delphi c Oracle через ODBC :))
 Пока же, поскольку все это дело будет реализовываться в Visual Foxpro, мне важно было узнать, что дело не в слабости драйвера, а в специфической реализации TStoredProc.


 
Vlad ©   (2004-05-08 20:55) [19]

Я вобще двума руками за использование компонентов Direct Oracle Access.
С БДЕ в свое время намучался, больше не хочу.
Единственное, когда использую ODBC драйвер, так это когда нужно слить информацию из разнотипных БД


 
Курдль ©   (2004-05-08 22:22) [20]


> Ты это... ветку читал или нет?

Я чё, читатель, что-ли? :( Я ж писатель!!!


> Пока же, поскольку все это дело будет реализовываться в
> Visual Foxpro

Разве эта идея лучше, чем работать из под Delphi c Oracle через ODBC?

> С БДЕ в свое время намучался, больше не хочу.
> Единственное, когда использую ODBC драйвер, так это когда
> нужно слить информацию из разнотипных БД

Готов подписаться под каждым словом, но добавить еще одно применение "SQL Direct + ODBC": написание мультибазовой программы. Т.е. чтобы без особых геморроев подставить проге другую базу через ODBC - и она ее примет, как родную.


 
Внук ©   (2004-05-09 19:21) [21]

>>Курдль ©   (08.05.04 22:22) [20]
>>Разве эта идея лучше, чем работать из под Delphi c Oracle через ODBC?
 Наверно, не лучше, но таковы требования.



Страницы: 1 вся ветка

Текущий архив: 2004.05.30;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.029 c
1-1084879735
aser
2004-05-18 15:28
2004.05.30
Время выполнения программы


14-1084177556
Всеволод Соловьёв
2004-05-10 12:25
2004.05.30
Про надмозга


3-1083104408
Chechen
2004-04-28 02:20
2004.05.30
SQL запрос


1-1084567825
LORDMAXX
2004-05-15 00:50
2004.05.30
Заблокировать компьютер


4-1082383750
Zaratustra
2004-04-19 18:09
2004.05.30
Поиск нлавного окна запущенного приложения...