问题标签 [opensql]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
10366 浏览

abap - LEFT OUTER JOIN 不返回任何行

我有两个具有相同键的表。我想在一个 SELECT 中,无需后续操作内部表中的数据,检索左侧表中右侧表中没有对应记录的所有记录(即右侧表中的列将是空的)。

以下是最合乎逻辑的做法,但这不会编译,因为您可能不会在 WHERE 子句的外部连接中使用右侧的字段:

一个看起来很有希望并且可以编译的替代方法是这个,但它不起作用,因为它甚至会带回那些在右侧表格中具有相应条目的条目:

此选项仅从右侧清除字段,但仍包括结果集中的所有内容。这可以通过从右侧选择字段来确认。

另一个也不起作用的选项是使用子选择:

0 投票
1 回答
4034 浏览

abap - Pragma to Hide Warning: where 条件中使用的字段可能包含空值

我正在寻找一个可以用来隐藏编译器警告时,当在选择的地方使用的字段可能包含数据库中的空值时,我可以用来隐藏编译器警告。

阅读 SAP note 1088403 后,我知道这里可能存在问题,但我无法应用那里建议的解决方案,因为我使用的是范围,而不是 WHERE 子句中的单个值。在任何一种情况下,这都是从未发现有缺陷的遗留代码(据我们所知),并且很快就会被替换。

然而,当我重写程序的其他部分时,我想用pragma禁用这个警告。谁能告诉我我可以为此使用什么编译指示?

示例选择:

请注意,我已经使用动态 where 子句替换了这个选择,该子句也隐藏了警告,因为编译器显然无法检查基于文本的位置。

0 投票
1 回答
16918 浏览

abap - 手动设置选择选项?

我有一个程序,除其他外,它RESB根据bdter字段(DATS 类型)从表中检索数据。在选择屏幕上,用户要么指定一个范围,要么使用一个标准范围(月初-今天)。

但是,如果我尝试在未填写日期的情况下重新使用为日期创建的选择选项(用户未输入日期范围),则当我对此工作区所做的更改似乎无法识别时在我的选择语句中使用它。

相关代码段如下。经过一些测试,我得出结论:

  • 如果s_bdter没有被用户修改并随后在代码中设置,则不过滤任何记录

  • 如果s_bdter被用户修改,记录被正确过滤

  • 如果s_bdter由用户修改并随后在代码中修改,则正确过滤记录

这是已知的并记录在案的行为吗?我通过创建自己的RANGE表格解决了这个问题,这是你一直应该做的吗?那么有没有办法重新使用未设置的选择选项来防止代码重复?

0 投票
1 回答
1918 浏览

abap - 加入 COVP 和 GLPCA 表

这个话题对我来说相当神秘,因为我不是 SAP/ABAP 开发人员(SAP 表对我来说只是一个数据源)

我有 2 张表 COVP 和 GLPCA。我尝试加入他们,但我不知道我可以使用哪个键。

任何想法 ?谢谢

0 投票
1 回答
2683 浏览

xml - 存储深层/嵌套结构

SAP 相当明智地禁止您在数据库表中包含深层结构。然而,对于一个新项目,我有一个我想要持久存储的深层嵌套结构。这个结构包括另外十几个结构,每个结构都可能进一步嵌套。这种结构基本上是给定业务合作伙伴的数十个标准 SAP 表中包含的数据的快照。我目前没有预见到构建这个结构、用数据填充它并以 XML 的方式发送它的问题。

但是,我不知道应该如何将整个交易保存到数据库中。由于我不能将这种嵌套的混乱转储到单个表中,因此我必须基本上重新创建 Z 表中的每个基础表关系。由于这看起来工作量太大,除了乏味和容易出错之外,我正在寻找一种替代解决方案来存储这些数据。

我在其他编程语言中遇到过这种情况,我只需将整个对象的数据转储存储为 XML、平面文件或任何格式du jour。然后,当查询表并重建对象并将其加载到内存中时,可以只加载此数据转储。这是 ABAP 开发的有效方法吗?是否有用于(反)构造通用嵌套结构的现有类或函数模块,还是我必须从头开始编写自己的逻辑?或者有没有我想念的替代方案?

0 投票
2 回答
2885 浏览

abap - 为 ROW_NUMBER() 打开等效的 SQL

ROW_NUMBER()ABAP 程序的功能是否有等价物?

该函数在 SQL 中的使用如下:

它应该将行号作为结果行中的第一列返回(我不确定它是结果集中的行号还是源表中的行号)。我发现该语句可以在 SAP Business One 中使用,但似乎找不到 Open SQL 等效项。

是否有一个或者我将被迫手动循环生成的 itab 以分配索引?

0 投票
3 回答
447 浏览

greatest-n-per-group - Open SQL 中每组的最大 N

通过(部分)键从表中选择特定列中具有最大值的行是 SQL 中的常见任务。这个问题有一些很好的答案,涵盖了各种方法。不幸的是,我正在努力在我的 ABAP 程序中复制它。

似乎不支持任何常用方法:

  • 语法不支持加入子查询:SELECT * FROM X as x INNER JOIN ( SELECT ... ) AS y
  • 据我所知,语法不支持将 IN 用于复合键:SELECT * FROM X WHERE (key1, key2) IN ( SELECT key1 key2 FROM ... )
  • 不支持使用小于比较的左连接自身,外连接仅支持 EQ 比较:SELECT * FROM X AS x LEFT JOIN X as xmax ON x-key1 = xmax-key1 AND x-key2 < xmax-key2 WHERE xmax-key IS INITIAL

在依次尝试了这些解决方案中的每一个之后,却发现 ABAP 似乎不支持它们并且无法找到任何等价物,我开始认为我别无选择,只能将子查询的数据转储到伊塔布。

ABAP 开发中这种常见的编程要求的最佳实践是什么?

0 投票
2 回答
4851 浏览

abap - 在屏幕上显示表格数据

我有一个名为 zrswheel 的数据库表。我输入了 3 个数据并想在屏幕上显示它们。这是我的代码

当我执行我得到这个错误:

运行时错误:DBIF_RSQL_INVALID_RSQL
除外。CX_SY_OPEN_SQL_DB

0 投票
2 回答
1265 浏览

commit - 提交一张桌子

是否可以仅对选定的表执行提交?

我遇到的问题是我不知道该进程是否更新了更多表,因此我想防止用我的提交来更新它们!

它是大规模处理,并且在流程结束时它将调用提交(逻辑上)。

那么有没有办法更新一个特殊的表而不是全部?

案例:大规模处理运行,就像我工作的那样,在其最后进行了更新。

我们/我的代码只是一个具有多个功能的 BAdI 实现。要获取特定数据需要向另一个系统发出请求,该请求不能在历史日志中留下任何足迹,因此必须回滚请求,以免将其持久化到系统中。

此请求用于工作项条目。因此,如果我处理 1 个数据集并生成一个工作项,则该工作项将被注册以在运行后抛出。在处理 2º 数量的数据集并向其他系统发出请求时,我必须回滚它,但第一数量的数据集的工作项条目将被删除(回滚)。

是否可以通过直接提交进行这些更新?-> 没有。

我不能简单地管理表以使用内部表进行更新并在运行结束时更新它们吗?-> 不,因为那些课程不属于我们。

为什么我不简单地在运行结束时进行回滚?-> 这些类不属于我们,否则必须更改整个质量处理结构。

0 投票
1 回答
4937 浏览

abap - ABAP 从数据库中检索数据到屏幕表控件

如果可能的话,我需要帮助,因为我被困在一个没有语法错误的地方。我正在使用 abap 将数据从我的数据库表中检索到屏幕 0300 中的表控件。每当我在屏幕 0300 中按直接处理时,我的表控件上都没有任何信息。这就是屏​​幕 0300 的流程逻辑:

这就是 PBO / PAI 代码:

考虑到我正在使用 dynpro 程序

提前谢谢大家