powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Вызов процедуры Oracle из FoxPro
9 сообщений из 9, страница 1 из 1
Вызов процедуры Oracle из FoxPro
    #36216465
Бурляев Вячеслав
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имеется процедура, написанная на PL/SQL, в клиенте FoxPro вызываем эту процедуру
Код: plaintext
1.
2.
3.
4.
5.
stroka = [call my_procedure('par1', 'par2')]
STORE SQLCONNECT('MyODBC') TO gnConnHandle
if gnConnHandle> 0 
    loAnswer=SQLEXEC(gnConnHandle,stroka,'rezult')
end if
Процедура
Код: plaintext
1.
2.
3.
4.
create or replace procedure my_procedure(p_par1 in varchar, p_par2 in varchar) is
begin
    insert into my_table(par1, par2) values (p_par1, p_par2);
end;
В таком варианте всё работает нормально
Однако, когда пришлось добавить в процедуре pl/sql третий параметр и у него тип out
Код: plaintext
1.
2.
3.
4.
5.
create or replace procedure my_procedure(p_par1 in varchar, p_par2 in varchar, p_par_new out integer) is
begin
    p_par_new :=  1 ;
    insert into my_table(par1, par2) values (p_par1, p_par2);
end;
в клиенте FoxPro процедура перестала выполняться.
При отладке обнаружил, что появляется ошибка Oracle, что не все переменные привязаны, то есть третий параметр нужно записывать как переменную привязки.
Прочитал в литературе по Oracle, что выходные парметры всегда должны быть bind variables (привязанными), но вот как это реализовать в клиенте foxPro пока не понял.
Может кто-нибудь сталкивался с такой проблемой? Подскажите как строчку
Код: plaintext
stroka = [call my_procedure('par1', 'par2')]
для случая, когда один из параметров имеет тип out написать
...
Рейтинг: 0 / 0
Вызов процедуры Oracle из FoxPro
    #36216535
Код: plaintext
1.
local par3
stroka = [call my_procedure('par1', 'par2', ?par3)]
...
Рейтинг: 0 / 0
Вызов процедуры Oracle из FoxPro
    #36216809
1270.0.1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
проходящий.,

вариант
Код: plaintext
call my_procedure('par1', 'par2', ?par3)
оставит значение переменной par3 без изменений, правильно:
Код: plaintext
call my_procedure('par1', 'par2', ?@par3)
где синтаксис ?@par3 -- обеспечит возврат переменной par3, объявленной в хран.проц. как параметр p_par_new out ...
...
Рейтинг: 0 / 0
Вызов процедуры Oracle из FoxPro
    #36216914
Бурляев Вячеслав
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1270.0.1, точно так и работает.
спасибо.

Я почему-то про оракловский синтаксис думал, с двоеточием
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Вызов процедуры Oracle из FoxPro
    #36872545
biswal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Бурляев Вячеслав,

странно, но я не могу вернуть исходящий параметр из процедуры в FoxPro.
Переменная описана как Local, синтаксис правильный.
LOCAL nrn
nrn = 0
stroka = [call P_FILELINKS_INSERT(...,?@nrn)]
не возвращает числовое ненулевое значение, соответствующий параметр в процедуре описан как Number. Процедура срабатывает, запись в таблицу добавляется.
Использую Microsoft ODBC для Oracle v.2.573.6200.00. Oracle 9.2.0.8.

Может кто сталкивался с подобным?
...
Рейтинг: 0 / 0
Вызов процедуры Oracle из FoxPro
    #36873171
Vch1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Параметры в процедуре оракла опишите как in out
Пример:
create or replace procedure del_calk(p_sistem_n in number,
p_otv in out varchar2,
p_otv1 in out number) is
Вызов из фокса:
otv=SPACE(200)
otv1 = 0
par_e = '{call uzp.del_calk(?m.sistem_n,'
par_e = par_e + '?@otv, ?@otv1)}'
q_povtor = 0
q_povtor = SQLEXEC(q_connect, par_e)
...
Рейтинг: 0 / 0
Вызов процедуры Oracle из FoxPro
    #36874129
biswal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vch1,

Спасибо Вам за совет. Поспешил им воспользоваться. Описал исходящий параметр в процедуре как
in out number. Но, увы, снова безуспешно. Не возвращает нужный результат. Сама процедура нормально отрабатывает.

LOCAL nrn
nrn = 0
conn1 = SQLCONNECT(...)
IF conn1 > 0
stroka = [call P_FILELINKS_INSERT(1744001,1747001,GET_FILELINKS_NEXTNUMB(1744001, NULL),'Акт','Тест','3.doc',NULL,NULL,?@nrn)]
res = SQLEXEC(conn1,stroka)
?nrn
ENDIF
= SQLDISCONNECT(conn1)

0.00
Такие дела...
...
Рейтинг: 0 / 0
Вызов процедуры Oracle из FoxPro
    #36874206
1270.0.1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
попробуйте использовать Oracle ODBC Driver (входит в состав клиента) - должно получиться
...
Рейтинг: 0 / 0
Вызов процедуры Oracle из FoxPro
    #36874359
biswal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1270.0.1,

а ведь правда работает с драйвером от Oracle. Возвращает значение.
Спасибо за подсказку.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Вызов процедуры Oracle из FoxPro
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]