Гость
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Можно ли курсор VFP передать в хранимую процедуру Oracle v9 / 19 сообщений из 19, страница 1 из 1
10.02.2008, 10:31
    #35122386
Beaver_lg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли курсор VFP передать в хранимую процедуру Oracle v9
Можно ли курсор VFP передать в хранимую процедуру Oracle v9?
...
Рейтинг: 0 / 0
10.02.2008, 14:14
    #35122547
Sergey Sizov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли курсор VFP передать в хранимую процедуру Oracle v9
Интересно, а как это хотя бы в общих чертах представляется? Учитывая тот факт, что с фоксовыми курсорами умеет работать только фокс.
Или речь идет только о передаче содержимого курсора на сервер?
...
Рейтинг: 0 / 0
11.02.2008, 02:19
    #35123068
ORA232
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли курсор VFP передать в хранимую процедуру Oracle v9
Как я понимаю, Вам нужно через execute immediate создать табличку со структурой сходной со сотруктурой фоксовского курсора. Затем заинсертить туда записи их курсора. В ORA поюзать эти данные, затем табличку дропнуть.
...
Рейтинг: 0 / 0
11.02.2008, 14:58
    #35124395
Peisov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли курсор VFP передать в хранимую процедуру Oracle v9
Про 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
11.02.2008, 20:22
    #35125332
Beaver_lg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли курсор VFP передать в хранимую процедуру Oracle v9
Хотелось конечно передать фоксовый курсор в виде параметра без конвертаций, но с XML тоже вариант. Буду пробовать. Спасибо.
...
Рейтинг: 0 / 0
12.02.2008, 11:14
    #35126168
tru55
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли курсор VFP передать в хранимую процедуру Oracle v9
Beaver_lgХотелось конечно передать фоксовый курсор в виде параметра без конвертаций, но с XML тоже вариант. Буду пробовать. Спасибо.

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

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

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

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

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

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

Все, что здесь рассказано - передача содержимого курсора, а не самого курсора.
Содержимое курсора передается обычными insert into ... И передать на сервер что-то иначе очень проблематично. А уж во временную или не временную таблицу - без разницы.
Передать же курсор - невозможно, так как для разбора его на серверной стороне серверу надо знать, что такое фоксовый курсор и как с ним работать.
...
Рейтинг: 0 / 0
13.02.2008, 10:35
    #35129060
Aleksey-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли курсор VFP передать в хранимую процедуру Oracle v9
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
13.02.2008, 10:38
    #35129074
Aleksey-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли курсор VFP передать в хранимую процедуру Oracle v9
проходящий.+1

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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


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