Текущее время: Ср, июл 09 2025, 00:53

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 15 ] 
Автор Сообщение
 Заголовок сообщения: Есть ли в Native SQL возможность читать данные пакетом срасзу по n-строк
СообщениеДобавлено: Пт, дек 08 2006, 10:10 
Специалист
Специалист

Зарегистрирован:
Пт, июл 28 2006, 08:36
Сообщения: 183
Посмотрел примеры Native SQL. Там предлогается читать данные либо все сразу, либо по строкам (FETCH). А есть ли возможность чтения пакетами по n-записей? Причем синтаксис должен быть универсальным для нескольких БД (Oracle, DB2), но не Open SQL.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, дек 08 2006, 10:14 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Пн, окт 11 2004, 20:32
Сообщения: 2470
Пол: Мужской
хе хе... еще один :)
Нету. Пользуйтесь OpenSQL

_________________
- Может ли настоящий мастер кунг-фу получить по морде?
- Настоящий мастер может все!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, дек 08 2006, 10:27 
Специалист
Специалист

Зарегистрирован:
Пт, июл 28 2006, 08:36
Сообщения: 183
Я соединяю много таблиц > 25. Open SQL падает. Так что хе-хе не уместно.

Дополнительный вопрос. В Open SQL есть опция WITH HOLD, которая удерживает курсор в открытом состоянии. Как быть с этим в Native SQL, если прочитав ну скажем 100 000 в одном пакете мне надо сохранить их в другой таблице, выполнив COMMIT? Как оставить курсор открытым?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, дек 08 2006, 10:28 
Почетный гуру
Почетный гуру

Зарегистрирован:
Вт, авг 17 2004, 10:45
Сообщения: 550
Откуда: SAP_BASIS 640
perishkin написал(а):
Я соединяю много таблиц > 25. Open SQL падает. Так что хе-хе не уместно.


Да уж... Здесь уместно ой-ой-ой.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, дек 08 2006, 10:32 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Сб, сен 25 2004, 16:30
Сообщения: 1368
Откуда: Москва
Пол: Мужской
Прошу прощения, если вы в одном запросе соединяете >25 таблиц, значит что-то не так с постановкой задачи. Скорее всего придется разбивать на несколько запросов.

_________________
С уважением, Сергей Королев


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, дек 08 2006, 10:46 
Специалист
Специалист

Зарегистрирован:
Пт, июл 28 2006, 08:36
Сообщения: 183
С постановкой все так. Посмотрите какой SQL генерится BW-запросами. Я пишу инструмент, позволяющий читать данный инфо-куба и такое количество таблиц в join-е - это привычное дело. Тоже сначала стал использовать Open SQL. На кубах с простой структурой он работал, а когда таблиц стало много - стал валиться.

Еще вопрос. Поскольку SQL я генерю, то он у меня получается типа string - то есть динамический. Внимание, вопрос! Как в Native SQL выполнить динамический запрос?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, дек 08 2006, 12:18 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, ноя 23 2005, 13:37
Сообщения: 1805
Откуда: ECC 6.0
Пол: Мужской
perishkin написал(а):
Внимание, вопрос! Как в Native SQL выполнить динамический запрос?


generate subroutine pool поможет.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, дек 08 2006, 12:24 
Специалист
Специалист

Зарегистрирован:
Пт, июл 28 2006, 08:36
Сообщения: 183
2 sibrin

...уже

единственное во что уперся - мне надо считывать курсор по N-записей и группировать их в пакет, а затем пакет сохранять - при этом фиксируется транзакция, а следовательно открытый курсор умирает. Как этого избежать. Куда копать?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, дек 08 2006, 15:30 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Чт, май 26 2005, 11:36
Сообщения: 651
Откуда: Киев-Москва
perishkin написал(а):
2 sibrin
...уже
единственное во что уперся - мне надо считывать курсор по N-записей и группировать их в пакет, а затем пакет сохранять - при этом фиксируется транзакция, а следовательно открытый курсор умирает. Как этого избежать. Куда копать?

Не фиксируйте, пишите пакет в табличку. Потом коммит, а из таблички потом построчно в транзакцию.
Но в любом случае - так работать не совсем здраво. 25 таблиц. BW может. А руками - это по-моему велосипед изобретать.
Проанализаруйте. Может и не нужно все таблицы связывать. Предобработка рулит.

_________________
Рисую потоки данных.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, дек 08 2006, 15:59 
Специалист
Специалист

Зарегистрирован:
Пт, июл 28 2006, 08:36
Сообщения: 183
2 Zharik

Данных много и писать все во внутреннюю таблицу с одним commit-ом - нереально, ресурсов не хватит.

Кто сказал что руками? Генерируется запрос кодом, а базируется он матописании BW-шных объектов - там и 40 таблиц может быть соединено.

Так что ваши решения отметаются, как несостоятельные.

Посмотрел в отладчике что делает BW...

- анализ метаописания

- генерация SQL

- проверка возможности исполнения запроса Open SQL (если таблиц < 25), иначе определить тип БД, сгенерировать VIEW в БД с использованием Native SQL (для VIEW генерится уникальное имя), прописать VIEW в системных DD*-таблицах, чтобы ее мог подхватить Open SQL

- в случае с Open SQL открыть WITH HOLD-курсор с генерированным запросом, а в случае с Native SQL открыть Open SQL WITH HOLD-курсор на основе сгенерированной вьюхи

- FETCH-им записи

- для Native-подхода удаляем VIEW из DD*-таблиц и из БД

Вот такой хитрый SAP. Если не найду пути проще придется детально разбираться в фашистком коде и реализовывать также :wink:


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб, дек 09 2006, 12:52 
Директор
Директор
Аватара пользователя

Зарегистрирован:
Пт, окт 21 2005, 09:24
Сообщения: 832
Откуда: от верблюда...тоже:)
Пол: Мужской
2 perishkin
А вы не пробовали юзать ФМ чтения инфопровайдера? Чем она не устраивает? Или стоит задача новый BW писать :shock:

_________________
а подпись...а подписи не будет :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, дек 11 2006, 09:47 
Специалист
Специалист

Зарегистрирован:
Пт, июл 28 2006, 08:36
Сообщения: 183
Задача стоит соединить куб и ODS по некторорым полям и получить данные куба, так что стандартные ФМ не подходят


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, дек 11 2006, 11:24 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Чт, май 26 2005, 11:36
Сообщения: 651
Откуда: Киев-Москва
Если мало памяти - пиши всё в файл на сервере приложений. А потом уже из него читай. Или в 10000 файлов по 1000 строк, чтобы меньше памяти занимать.
Если делаешь что-то слишком нестандартное - готовься к извращенным решениям.

_________________
Рисую потоки данных.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, дек 14 2006, 00:38 
Старший специалист
Старший специалист

Зарегистрирован:
Сб, окт 21 2006, 20:34
Сообщения: 280
А может проще средствами BW произвести пересечение куба с ODS и полученный объект данных читать ФМ или другим стандартным способом - потом куб поменяют - добавят что нибудь - таблиц станет не 25 а 45 - и что потом ...


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, дек 14 2006, 10:56 
Специалист
Специалист

Зарегистрирован:
Пт, июл 28 2006, 08:36
Сообщения: 183
2 dump

Средствами BW сделать пересечение куба и ODS? Ну, если подскажите как, попробую... Что касается количества таблиц, то уже
написал на Native SQL чтение произвольного куба, осталось дописать функционал пересечения. Так что потом - суп с котом.


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 15 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB