Текущее время: Вс, июл 13 2025, 09:19

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: Ahrefs [Bot]


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

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