Как воссоздать запросы SAP в Oracle?

Мне нужно воссоздать некоторые хранимые процедуры SAP в Oracle. Я пытался найти учебные пособия, похожие вопросы, примеры и т. Д., Но, видимо, никому не приходилось делать это раньше.

Какой запрос Oracle SQL может быть похож на этот запрос SAP?

SELECT * FROM A
 INTO CORRESPONDING FIELDS OF TABLE B
 FOR ALL ENTRIES IN C
 WHERE a = C-a
 AND x = y.

 LOOP AT B INTO D.
   D-b = E-b.

 INSERT c FROM D.
 IF SY-SUBRC <> 0.
   WRITE: / 'error on insert', D-b, D-a.
 ENDIF.

Любая помощь будет оценена, спасибо.


person frankie015    schedule 20.09.2015    source источник


Ответы (2)


Я рекомендую вам использовать транзакцию ST05 для отслеживания вашей программы. Этот инструмент покажет подробную информацию о запросах в базе данных, включая точный выполненный SQL.

РЕДАКТИРОВАТЬ: В качестве демонстрации запросов, сгенерированных SAP для Oracle, давайте выполним этот код и проследим его с транзакцией «ST05». Не забудьте запустить «ST05» перед выполнением программы.

tables: mara.
data: it_mara type standard table of mara,
      it_eina type standard table of eina.

select-options so_matnr for mara-matnr.

start-of-selection.

select matnr from mara into corresponding fields of table it_mara 
up to 100 rows where matnr in so_matnr.

check sy-subrc eq 0.

select * from eina into table it_eina for all entries in it_mara
  where matnr eq it_mara-matnr.

После выполнения проверьте вывод в транзакции ST05:

введите здесь описание изображения

Если вы хотите получить более подробную информацию, выберите оператор SQL на экране, а затем нажмите кнопку «Объяснить». Вы увидите следующее:

введите здесь описание изображения

Для лучшего ознакомления с транзакцией ST05 см. по этой ссылке.

Надеюсь, поможет.

person Nelson Miranda    schedule 20.09.2015

Оператор FOR ALL ENTRIES обычно создает множество запросов, результаты которых затем группируются по UNION или UNION ALL.

Вот действительно хороший анализ для Microsoft SQL Server.

Из-за того, что UNION и UNION ALL являются частью стандарта SQL, я думаю, что это реализовано точно то же самое для любой другой базы данных SQL.

[РЕДАКТИРОВАТЬ]

Как заявил г-н Миранда, с базой данных Oracle все выглядит иначе. Я немного погуглил и нашел эта статья, где говорится, что используются IN-LIST, что также кажется правдоподобным.

person Jagger    schedule 21.09.2015
comment
SAP Notes 652634, упомянутые в статье, по-видимому, применимы только к MS SQL Server, а не к Oracle, а это означает, что функция UNION доступна только для SQL Server. Мы используем Oracle и не экспериментируем с этим поведением в наших запросах FAE. - person Nelson Miranda; 21.09.2015
comment
Вы абсолютно уверены, что UNION и UNION ALL не являются частью стандарта SQL? Я думаю, что да, но проверьте сами. - person Jagger; 21.09.2015
comment
Я не говорю о функции UNION ‹ALL› стандартного SQL. Я говорю о том, что запросы, сгенерированные SAP в Oracle, не используют UNION‹ALL›, когда мы используем FAE. На самом деле, если вы проверите SAP OSS #652634, в нем указан компонент 'BC-DB-MSS Microsoft SQL Server', но проверьте сами sap-consalt.ru/vanilla/discussion/66533/. Как я уже сказал, мы используем Oracle и не экспериментируем с этим поведением. Ни один из наших FAE не создает запросы UNION‹ALL›. - person Nelson Miranda; 21.09.2015
comment
Не могли бы вы тогда быть так любезны и рассказать, какие именно запросы Oracle выдаются, потому что я не вижу никакой другой возможности, кроме тех трех, что описаны в статье про SQL Server. Для FAE должно быть сгенерировано столько запросов, сколько записей во внутренней таблице, используемой в FAE. - person Jagger; 22.09.2015
comment
@NelsonMiranda Я обновил ответ на основе ваших комментариев. - person Jagger; 22.09.2015