Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.05.30;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.034 c
3-1084046913
ser_ega
2004-05-09 00:08
2004.05.30
Database Desktop


1-1084782601
BelAS
2004-05-17 12:30
2004.05.30
Хитрая распечатка


14-1084200692
ССЗБ
2004-05-10 18:51
2004.05.30
Просмотр Word-овского файла


1-1084863068
webpauk
2004-05-18 10:51
2004.05.30
Много окон


14-1084440218
Dmitriy O.
2004-05-13 13:23
2004.05.30
Приятель хочет купить ком нужен совет.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский