4

我需要在 Oracle 中重新创建一些 SAP 存储过程。我一直在尝试找到有关此的教程、类似问题、示例等,但显然以前没有人必须这样做

什么 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.

任何帮助将不胜感激,谢谢。

4

2 回答 2

4

我建议您使用事务“ST05”来跟踪您的程序。此工具将显示数据库查询的详细信息,包括执行的确切 SQL。

编辑:作为 SAP for 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”,请查看此链接

希望能帮助到你。

于 2015-09-20T23:03:01.187 回答
1

FOR ALL ENTRIES语句通常会产生许多查询,然后将结果按UNIONor分组UNION ALL

是对 Microsoft SQL Server 的一个非常好的分析。

由于UNIONandUNION ALL是SQL 标准的一部分,我认为它对于任何其他 SQL 数据库的实现方式完全相同。

[编辑]

正如 Miranda 先生所说,Oracle 数据库看起来不一样。我用谷歌搜索了一下,发现这篇文章说IN-LIST使用了 s,这似乎也是合理的。

于 2015-09-21T06:26:21.750 回答