powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / SQLEXEC()
19 сообщений из 19, страница 1 из 1
SQLEXEC()
    #33311592
Maltsev Max
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как вызвать хранимую процедуру/функцию из БД Oracle
Пишу
?SQLEXEC(nConnect,"BEGIN Veri_PK(); END;")

Возвращает: Connectivity error: ORA-00900: неверно предложение на языке SQL

Пишу
?SQLEXEC(nConnect,"{call Verni_PK(1)}")

Возвращает: Connectivity error: ORA-06550: Строка 1, столбец 7:
PLS-00221: 'VERNI_PK' не является процедурой или не определена
ORA-06550: Строка 1, столбец 7:
PL/SQL: Statement ignored

Как эту функцию вызвать?!?!
...
Рейтинг: 0 / 0
SQLEXEC()
    #33311615
AleksMed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
?SQLEXEC(nConnect,"{call Verni_PK 1}")
...
Рейтинг: 0 / 0
SQLEXEC()
    #33311655
Maltsev Max
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
на SQLEXEC(nConnect,"{call Verni_PK 1}")
он мне ответил: Connectivity error: ORA-06550: Строка 1, столбец 16:
PLS-00103: Встретился символ "1" в то время как ожидалось одно из следующих:

:= . ( @ % ;
Символ ":=" заменен на "1", чтобы можно было продолжать.
...
Рейтинг: 0 / 0
SQLEXEC()
    #33312011
Фотография FM32YO aka KID
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Recordid = '540'
Sur = 'Фамилия'
Nam = 'Имя'

cSP = "{call MySchema.MySP(?Recordid, ?Sur, ?Nam)}"

k = SQLExec(gnConnHandle, cSP)

IF K <> 1
= MESSAGEBOX('Xранимая процедура ' + cSP + ' не выполнилась!!!!', 48, 'Сообщение об ощибке')
ENDIF

Я меня так работает
и так тоже:
cSP = "BEGIN MySchema.MySP(?Recordid, ?Sur, ?Nam) ; END;"

(подсказал YuriWhite)
...
Рейтинг: 0 / 0
SQLEXEC()
    #33312847
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Maltsev Max!

Видимо начудил с именем (кстати у тебя в сообщении 2 разных имени указано),
или с тем, что коннектищься к одной схеме, а процедуру пытаешься вызвать из
другой схемы (не указывая явно имя схемы, ну и соответственно у тебя нет
глобального синонима на эту процедуру). Может также быть вариант что не
хватает каких-то прав...

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
SQLEXEC()
    #33313989
Maltsev Max
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
По немногу начинаю разбираться ...

Дело в том, что VERNI_PK -- функция, которая возвращает значение.
Если я напишу
Код: plaintext
1.
2.
cSP = "declare t integer; BEGIN t:=VERNI_PK(?ecordid); END;" 
k = SQLExec(qwe, cSP)
Все работает, но результата работы функции я не имею.

Как мне его поиметь ?!? :-))
...
Рейтинг: 0 / 0
SQLEXEC()
    #33314036
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторКак мне его поиметь ?!? :-))
иметь что попало это извращение....
а вообще обычно результат находят в курсоре
SQLResault по умолчанию если не ошибся
...
Рейтинг: 0 / 0
SQLEXEC()
    #33314240
Maltsev Max
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
leaf авторКак мне его поиметь ?!? :-))
иметь что попало это извращение....
а вообще обычно результат находят в курсоре
SQLResault по умолчанию если не ошибся

Это я знаю, но в данной конструкции результат работы функции(число) находится "на сервере".
Как мне его выкинуть "Наружу" ?!?
...
Рейтинг: 0 / 0
SQLEXEC()
    #33314560
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
специально для шустрых...
SQLEXEC(nConnectionHandle, [cSQLCommand, [cCursorName] ])

cCursorName
Specifies the name of the Visual FoxPro cursor to which the result set is sent. If you don't include a cursor name, Visual FoxPro uses the default name SQLRESULT .

Example

= SQLSETPROP(gnConnHandle, 'asynchronous', .F.)
= SQLEXEC(gnConnHandle, 'SELECT * FROM authors', 'MyCursor' )
select MyCursor
brow normal
...
Рейтинг: 0 / 0
SQLEXEC()
    #33314567
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
p.s.
поезд отходит с третьей и четвертой рельсы ....
хелп его для чтения написали блин.................
...
Рейтинг: 0 / 0
SQLEXEC()
    #33315075
Maltsev Max
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хорошо. Я повторю еще раз.

При вызове хранимой функции:
Код: plaintext
1.
2.
3.
cSP = "BEGIN VERNI_PK(?ecordid); END;" 
k = SQLExec(qwe, cSP)


вываливается ошибка:
Код: plaintext
1.
2.
3.
4.
Connectivity error: ORA- 06550 : Строка  1 , столбец  7 :
PLS- 00221 : 'VERNI_PK' не является процедурой или не определена
ORA- 06550 : Строка  1 , столбец  7 :
PL/SQL: Statement ignored

Если же я напишу:
Код: plaintext
1.
2.
cSP = "declare t integer; BEGIN t:=VERNI_PK(?ecordid); END;" 
k = SQLExec(qwe, cSP)

Никакая ошибка не вываливается, K=1, но и Used("SqlResilt")=.F.
...
Рейтинг: 0 / 0
SQLEXEC()
    #33315209
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторUsed("SqlResilt")=.F.
к чему так напрягаться просто внимательно следите за руками ....

default name SQLRESULT .
...
Рейтинг: 0 / 0
SQLEXEC()
    #33315237
Maltsev Max
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Блин, очепятался. Конечно sqlResUlt

Но я делал проще, писал SET ... И в окошке Data Session пусто ...


P. S. Вот прикопался...
...
Рейтинг: 0 / 0
SQLEXEC()
    #33315666
Фотография FM32YO aka KID
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cStringAsOutPutParameterofMySP = space(1000)

cSelect = "BEGIN MySchema.MySP(?SomeInputPrarameter, ?lnAmount, ?@cStringAsOutPutParameterofMySP); END;"
lnResult = SQLEXEC(lnConnHandle, cSelect)

= messagebox(cStringAsOutPutParameterofMySP,48,'Нате')


(Подсказал YuriWhite)
...
Рейтинг: 0 / 0
SQLEXEC()
    #33315708
Фотография FM32YO aka KID
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если я верно понял: VERNI_PK -- функция, которая возвращает значение
то вызывать ее надо так:

Код: plaintext
1.
2.
3.
cSP = "BEGIN VERNI_PK(?@ecordid); END;" 
k = SQLExec(qwe, cSP)

...
Рейтинг: 0 / 0
SQLEXEC()
    #33315714
Фотография FM32YO aka KID
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sorry надо так:


Код: plaintext
1.
2.
3.
cSP = "BEGIN VERNI_PK(?@ecordid); END;" 
k = SQLExec(qwe, cSP)


значок @ - выходной параметр
...
Рейтинг: 0 / 0
SQLEXEC()
    #33316156
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi leaf!

Вот читаю и удивляюсь - или ты вопроса совершенно не понял, или просто не
зная ответа пишешь абы что :(
Не возвращается РЕЗУЛЬТАТ работы ФУНКЦИИ через резалтсет из Oracle - и
соответственно никакого курсора на стороне фокса не образуется. В этом и
проблема.

2 Maltsev Max

В Oracle есть существенная разница между процедурой и функций. Также есть
разница между Output параметром (он хоть и Output - но ПАРАМЕТР) и
возвращаемым значением функции.
Для простого случая наверное хватит банального запроса "SELECT
MyFunction(?Param1, ?Param2) AS RetVal FROM dual" - это создаст курсор на
стороне фокса с единственным полем RetVal.

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
SQLEXEC()
    #33316257
Maltsev Max
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Igor Korolyov

2 Maltsev Max

В Oracle есть существенная разница между процедурой и функций. Также есть
разница между Output параметром (он хоть и Output - но ПАРАМЕТР) и
возвращаемым значением функции.
Для простого случая наверное хватит банального запроса "SELECT
MyFunction(?Param1, ?Param2) AS RetVal FROM dual" - это создаст курсор на
стороне фокса с единственным полем RetVal.

Posted via ActualForum NNTP Server 1.3

Igor Korolyov, спасибо.
Показал нужное направление.
С селектом ничего не получилось, скорее всего из-за того, что в функции стоит Commit.
Но с Output параметром все заработало как надо.

Но так, как функция не моя, и я не могу менять ее интерфейс, вопрос:Может-ли параметр, обновременно быть OutPut и Input ?!
...
Рейтинг: 0 / 0
SQLEXEC()
    #33316266
Maltsev Max
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос снимается.

Код: plaintext
CREATE OR REPLACE function VERNI_PK(Kolich in Out number) return number is
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / SQLEXEC()
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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