Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 получить данные из объектной базы  [new]
oscol
Member

Откуда:
Сообщений: 223
Зравствуйте.
Проблема у нас заключается в следующем.
Есть две БД. Одна под Oracle 9.2 ("A"), другая - под Oracle 8.1.7 ("B").
Организация БД "B" - объектная.
На БД "A" создан линк на БД "B". Если сделать запрос на объектную БД "B",
то возвращается ошибка ORA 22804-удаленные операции над таблицами
объектов и столбцами пользовательских типов не разрешены.

select /*+FIRST_ROWS*/
p.prs_ust.name1.getrus()
from j.prs_mains@jor p
where p.prs_ust.name1.id in
(select id_c_name from j.c_names@jor cn where cn.name_content.rus like 'ПЛЮШКИН%')

Можно создать на БД "B" view следующего вида
CREATE OR REPLACE VIEW W_OD
(SURNAME)
AS
select /*+FIRST_ROWS*/
p.prs_ust.name1.getrus()
from j.prs_mains

В этом случае запрос по линку к представлению возвращает данные без сбоя.
Однако возникает другая проблема. Пользователю необходима не все строки
из курсора, а отбор строк по конкретной фамилии.
Запрос select * from w_od@jor where surname like 'ПЛЮШКИН%'
отрабатывает очень долго, что недопустимо для приложения.
Индексы на представление создать нельзя. Создание SNAPSHOT
с индексами на него имеет свои недостатки (массив размером в gb, обновление изменений
должно быть моментальным и т.д.). Создать представление с динамически
изменяющимся параметром в where ,я полагаю тоже нельзя.
CREATE OR REPLACE VIEW W_OD
(SURNAME)
AS
select /*+FIRST_ROWS*/
p.prs_ust.name1.getrus()
from j.prs_mains p
where p.prs_ust.name1.id in
(select id_c_name from j.c_names cn where cn.name_content.rus like :VAR)

Что можете посоветовать ?
Спасибо.
4 янв 07, 19:22    [3607657]     Ответить | Цитировать Сообщить модератору
 Re: получить данные из объектной базы  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116070
oscol
Пользователю необходима не все строки
из курсора, а отбор строк по конкретной фамилии.
Запрос select * from w_od@jor where surname like 'ПЛЮШКИН%'


like обязателен ?
4 янв 07, 19:25    [3607665]     Ответить | Цитировать Сообщить модератору
 Re: получить данные из объектной базы  [new]
oscol
Member

Откуда:
Сообщений: 223
Да like обязателен, т.к. допускается частичное заполнение реквизита и отбор группы лиц
4 янв 07, 19:29    [3607679]     Ответить | Цитировать Сообщить модератору
 Процедурный подход устроит?  [new]
Sergei.Agalakov
Member

Откуда:
Сообщений: 575
Создаете на базе В пакетную процедуру возвращающую курсор в базу А.
Как варианты: функция, возвращаюцая таблицу, или параметризированная по контексту вью.
Мне кажется, что вариант с удоленной процедурой проще всего.
5 янв 07, 01:34    [3608249]     Ответить | Цитировать Сообщить модератору
 Re: получить данные из объектной базы  [new]
oscol
Member

Откуда:
Сообщений: 223
Еще до ознакомления с Вашим ответом , утром начал писать пакетную процедуру с передачей данных через курсорную переменную. Для меня пока проблема передать курсорную переменную в стандартную компоненту Delphi. Никогда этого не делал. Всегда применял компоненты DOA. Сегодня проверю результат, хотя есть сомнения, что в курсорную переменную попадут данные, преобразованные из объектных типов. Спасибо за совет
5 янв 07, 16:25    [3609394]     Ответить | Цитировать Сообщить модератору
 Re: получить данные из объектной базы  [new]
as_7898
Member

Откуда: Spb
Сообщений: 59
oscol
Еще до ознакомления с Вашим ответом , утром начал писать пакетную процедуру с передачей данных через курсорную переменную. Для меня пока проблема передать курсорную переменную в стандартную компоненту Delphi. Никогда этого не делал. Всегда применял компоненты DOA. Сегодня проверю результат, хотя есть сомнения, что в курсорную переменную попадут данные, преобразованные из объектных типов. Спасибо за совет


Главное - получить результирующий набор в вызывающую базу,
а что с ним дальше делать - решать Вам.

Я, обычно, через global temporary table - привык, да и некая универсальность.

--
AS
5 янв 07, 19:16    [3609812]     Ответить | Цитировать Сообщить модератору
 Re: получить данные из объектной базы  [new]
oscol
Member

Откуда:
Сообщений: 223
Если запускаю процедуру на сервере, где она хранится, то через курсорную переменную в процедуре обїектные данные передаются без ошибок. Запускаю эту процедуру как удаленную, возвращается ошибка ORA-01001 неверный курсор. ORA-02063 предшествующий line из ...
Похоже удаленная процедура не решает проблемы, поднятой в моем первом сообщении.
9 янв 07, 10:27    [3614729]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить