powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Можно ли курсор VFP передать в хранимую процедуру Oracle v9
19 сообщений из 19, страница 1 из 1
Можно ли курсор VFP передать в хранимую процедуру Oracle v9
    #35122386
Beaver_lg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно ли курсор VFP передать в хранимую процедуру Oracle v9?
...
Рейтинг: 0 / 0
Можно ли курсор VFP передать в хранимую процедуру Oracle v9
    #35122547
Sergey Sizov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересно, а как это хотя бы в общих чертах представляется? Учитывая тот факт, что с фоксовыми курсорами умеет работать только фокс.
Или речь идет только о передаче содержимого курсора на сервер?
...
Рейтинг: 0 / 0
Можно ли курсор VFP передать в хранимую процедуру Oracle v9
    #35123068
ORA232
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как я понимаю, Вам нужно через execute immediate создать табличку со структурой сходной со сотруктурой фоксовского курсора. Затем заинсертить туда записи их курсора. В ORA поюзать эти данные, затем табличку дропнуть.
...
Рейтинг: 0 / 0
Можно ли курсор VFP передать в хранимую процедуру Oracle v9
    #35124395
Peisov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Про Orecle - на знаю, но могу поделиться подобным с использованием MS SQL.

Итак.
1. В фоксе - есть курсор
2. Преобразуем его в XML с помощью CURSORTOXML
3. Запускаем хранимую процедуру

Код: plaintext
sqlexec (nHandle,[exec MyProc ]+CURSORTOXML(...))

Соответственно хранимая процедура на сервере имеет вид

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CREATE PROCEDURE MyProc
@text varchar( 8000 )

AS

declare @hDoc int

exec sp_xml_preparedocument @hDoc output, @text

...........

exec sp_xml_removedocument @hDoc
...
Рейтинг: 0 / 0
Можно ли курсор VFP передать в хранимую процедуру Oracle v9
    #35125332
Beaver_lg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотелось конечно передать фоксовый курсор в виде параметра без конвертаций, но с XML тоже вариант. Буду пробовать. Спасибо.
...
Рейтинг: 0 / 0
Можно ли курсор VFP передать в хранимую процедуру Oracle v9
    #35126168
tru55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Beaver_lgХотелось конечно передать фоксовый курсор в виде параметра без конвертаций, но с XML тоже вариант. Буду пробовать. Спасибо.

Ой, не надо ничего конвертировать.
Опиши подробнее задачу - что надо с этим курсором делать в Oracle. Кстати, курсор в Fox-е - это результат SELECT или что-то еще?
...
Рейтинг: 0 / 0
Можно ли курсор VFP передать в хранимую процедуру Oracle v9
    #35128187
Beaver_lg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tru55
Ой, не надо ничего конвертировать.
Опиши подробнее задачу... - что надо с этим курсором делать в Oracle. Кстати, курсор в Fox-е - это результат SELECT или что-то еще?

один из вариантов применения.
на клиенте в локальный курсор набирются несколько записей (например позиции в накладной).
далее их следует сохранить на сервер одной транзакцией с использованием хранимой процедуры.

Вот и хочеться передать в качестве параметра процедуры курсор из клиента, который обработать уже на сервере.

для операций с записями (ввод новых, изменение, удаление) используются хранимые процедуры. применение процедур обязательно, т.к. в них идет дополнительная проверка/контроль.
...
Рейтинг: 0 / 0
Можно ли курсор VFP передать в хранимую процедуру Oracle v9
    #35128354
Vch1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Один из вариантов решения указанной проблемы - применение временной таблицы (Temporary table). Курсор передается во временную таблицу через хранимую процедуру. В случае успешной передачи всего курсора, данные временной таблицы передаются в рабочую в пределах одной транзакции. Для управления передачей можно в структуру передавемой информации добавить технологические поля: порядковый номер строки и общее количество строк. В случае неуспешной передачи курсора (например: разрыв соединения с базой до окончания передачи) заботся о частично переданных данных нет необходимости - этот вопрос берет на себя Оракл при обслуживании временной таблицы. При небольших размерах курсора такой способ вполне приемлем.
...
Рейтинг: 0 / 0
Можно ли курсор VFP передать в хранимую процедуру Oracle v9
    #35128925
Peisov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Камрады - я офигеваю.
Человек задает вопрос - как передать курсор из VFP в хранимую процедуру (в качестве аргумента)?

Ответ:
Vch1Курсор передается во временную таблицу через хранимую процедуру.

Так как он передается-то ?
Примеры кода в студию!
...
Рейтинг: 0 / 0
Можно ли курсор VFP передать в хранимую процедуру Oracle v9
    #35129044
+1

Все, что здесь рассказано - передача содержимого курсора, а не самого курсора.
Содержимое курсора передается обычными insert into ... И передать на сервер что-то иначе очень проблематично. А уж во временную или не временную таблицу - без разницы.
Передать же курсор - невозможно, так как для разбора его на серверной стороне серверу надо знать, что такое фоксовый курсор и как с ним работать.
...
Рейтинг: 0 / 0
Можно ли курсор VFP передать в хранимую процедуру Oracle v9
    #35129060
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PeisovКамрады - я офигеваю.
Человек задает вопрос - как передать курсор из VFP в хранимую процедуру (в качестве аргумента)?

Ответ:
Vch1Курсор передается во временную таблицу через хранимую процедуру.

Так как он передается-то ?
Примеры кода в студию!
А что такого тут есть, от чего можно "офигевать" !?
Я правда не знаю, как это в ORACLE, есть ли там вообще временные таблицы и есть ли возможность их создать из клиента VFP, но механизм вполне обкатан для MS SQL.
1. Создаешь временную таблицу из клиента:
Код: plaintext
SQLEXEC(m.glh, 'CREATE TABLE #Mytemp (....)')
2. Заполняешь ее из клиента в цикле:
Код: plaintext
1.
2.
3.
SELECT MyCursor
SCAN
       SQLEXEC(m.glh, 'INSERT INTO #Mytemp (....) VALUES (?MyCursor.F1, ?MyCursor.F2')
ENDSCAN
3. Вызываешь хранимую процедуру сервера, которая "знает" из какой временной таблице надо забирать данные.
Код: plaintext
SQLEXEC(m.glh, 'EXEC MySP')
4. Удаляешь временную таблицу.
Код: plaintext
SQLEXEC(m.glh, 'DROP TABLE #Mytemp')

Использование временных таблиц, как буфера данных допустим так, как областью сушествования их в данном контексте использования является соединение с сервером.
Но все так выглядит для MS SQL. Может для ORACLE это все не годиться?
С уважением, Алексей
P.S. Вариант с использование XML строки работает на больших данных быстрее.
Для формирования XML строки (или файла, если данных очень много) можно использовать команду VFP - CURSORTOXML.
Для извлечения данных из переданной в хранимую процедуру этой строки, проще всего использовать функцию OPENXML (для MS SQL)
...
Рейтинг: 0 / 0
Можно ли курсор VFP передать в хранимую процедуру Oracle v9
    #35129074
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
проходящий.+1

Все, что здесь рассказано - передача содержимого курсора, а не самого курсора.
Содержимое курсора передается обычными insert into ... И передать на сервер что-то иначе очень проблематично. А уж во временную или не временную таблицу - без разницы.
Передать же курсор - невозможно, так как для разбора его на серверной стороне серверу надо знать, что такое фоксовый курсор и как с ним работать.
А вы думаете, что Beaver_lg имел в виду что-то другое ?
Хотя...., пора бы и автору вопроса что-нибудь пояснить.
С уважением, Алексей
...
Рейтинг: 0 / 0
Можно ли курсор VFP передать в хранимую процедуру Oracle v9
    #35129214
Sergey Sizov.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Aleksey-KА вы думаете, что Beaver_lg имел в виду что-то другое ?

Понимаете ли, Алексей, совершенно неизживна наиваня мечта начинающих работать в архитектуре клиент-сервер передавать на сервер именно курсор. Произвольной структуры. Чтобы не писать тучу инсертов, при чем разных для каждого случая, не писать, опять же, для каждого случая свой разбор полученного на серверной стороне и т.д. Им жутко хочется универсальности. Один раз написал создание курсора, передал его на сервер, там тоже одной универсальной процедурой его разобрал и можно плевать в потолок.
...
Рейтинг: 0 / 0
Можно ли курсор VFP передать в хранимую процедуру Oracle v9
    #35129247
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey Sizov. Aleksey-KА вы думаете, что Beaver_lg имел в виду что-то другое ?

Понимаете ли, Алексей, совершенно неизживна наиваня мечта начинающих работать в архитектуре клиент-сервер передавать на сервер именно курсор. Произвольной структуры. Чтобы не писать тучу инсертов, при чем разных для каждого случая, не писать, опять же, для каждого случая свой разбор полученного на серверной стороне и т.д. Им жутко хочется универсальности. Один раз написал создание курсора, передал его на сервер, там тоже одной универсальной процедурой его разобрал и можно плевать в потолок.
А.. понял... :) Мечта.... солнце, пляж...девочки... курсор на сервер...
ряд можно продолжить..... :)
С уважением, Алексей
...
Рейтинг: 0 / 0
Можно ли курсор VFP передать в хранимую процедуру Oracle v9
    #35129411
tru55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Beaver_lg tru55
Ой, не надо ничего конвертировать.
Опиши подробнее задачу... - что надо с этим курсором делать в Oracle. Кстати, курсор в Fox-е - это результат SELECT или что-то еще?

один из вариантов применения.
на клиенте в локальный курсор набирются несколько записей (например позиции в накладной).
далее их следует сохранить на сервер одной транзакцией с использованием хранимой процедуры.

Вот и хочеться передать в качестве параметра процедуры курсор из клиента, который обработать уже на сервере.

для операций с записями (ввод новых, изменение, удаление) используются хранимые процедуры. применение процедур обязательно, т.к. в них идет дополнительная проверка/контроль.

Меня интересует, что значит "локальный курсор".

Если это результат SELECT из некоторой таблицы - это одно. Например, позиции в накладной
Код: plaintext
1.
2.
3.
SELECT *
FROM tab1
WHERE id =  100 
В этом случае, если настроен гетерогенный сервис из Oracle на эту таблицу, можно вызвать хранимую процедуру Oracle, передав ей в кач. параметра признак (в данном случае этот id). Тогда этот SELECT можно выполнить (или открыть по нему курсор) прямо из этой процедуры.

Если это просто набор строк (например, набранных на экране в клиентском приложении), то надо и передавать этот самый набор строк, например, записав его во временную таблицу (как тут предлагалось) либо в коллекцию, находящуюся в пакете.
...
Рейтинг: 0 / 0
Можно ли курсор VFP передать в хранимую процедуру Oracle v9
    #35131131
Beaver_lg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для tru55: "локальный курсор" может быть и выборка с сервера - когда проводиться редактирование накладной, но в процессе редактирования могут быть добавлены новые записи еще не сохраненные в БД, а может быть и новая накладная которая еще не сохранялась в БД.


Насчет мечты подмечено точно :-)
Вариант с временной таблицой сервера думаю будет наиболее приемлимым. Прийдется все же писать две процедуры: одну для заполнения временной таблицы, а другую для обработки загруженных данных, раз нет универсального способа.
...
Рейтинг: 0 / 0
Можно ли курсор VFP передать в хранимую процедуру Oracle v9
    #35131301
Vch1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Beaver_lg
Создавать две процедуры совершенно не обязательно. Все можно сделать в одной. Так даже проще и удобнее.

Peisov
Построчно батенька, построчно. А ехидничать причин нет.

Проблема передачи курсора связана с совместимостью типов данных параметров хранимой процедуры. В оракле есть тип данных - курсорная переменная, который может использоваться в параметрах хранимой процедуры. А в фоксе - нет. Например, в делфи есть тип данных курсор, который можно передать и получить через хранимую процедуру.
При передаче больших объектов на сервер используется технология приемник-передатчик. Т.е. данные передаются пакетами и собираются на сервере, для чего оракл неявно использует временные таблицы. Поэтому решение о применении временной таблицы для передачи курсора не выглятит совершенно плохим.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Можно ли курсор VFP передать в хранимую процедуру Oracle v9
    #37677287
Jek Green
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Aleksey-K,

Супер-РЕСПЕКТ вам Алексей !

Совсем недавно занялся связкой VFP--MSSQL...

И на примере малых баз попробовал милионные таблицы инсертить инту -- удалённый курсор,
получил скорость 10-20 записей в сек.! )))

Ваш пример , несмотря на казалось-бы "тормозной внешний цикл" , обеспечил скорость - около 1000 зап/сек ,
и полностью решил проблему времени перелива БД в MSSQL ! :)

СПАСИБО !
...
Рейтинг: 0 / 0
Можно ли курсор VFP передать в хранимую процедуру Oracle v9
    #37677676
Beaver_lgМожно ли курсор VFP передать в хранимую процедуру Oracle v9?
Можно напрямую записать в базу оракла по odbc!
Для этого не нужен вам xml и прочий кал. (никогда не слушайте лохов! )
Берём odbc драйвер оракла и вперёд с песней.
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Можно ли курсор VFP передать в хранимую процедуру Oracle v9
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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