首页 > 解决方案 > 从 GET_AUTH_VALUES FM 输出构造 SQL 查询

问题描述

我使用结构类型为us335的get_auth_values()的结果。

此结果可以包含单个值或成对的低高值。我想使用这些类似 us335 的结果并执行 SQL 查询。将条目与AND.

我看到这些方法来解决这个问题:

我想还有更多的方法可以解决这个问题。

最可行的方法是什么?

标签: abapopensql

解决方案


组装一个动态的 WHERE 子句。从功能模块开始RH_DYNAMIC_WHERE_BUILD。如果不合适,请编写一个自己的字符串生成器。

您还可以为动态 IN 子句构建范围,但这会更难。字段类型各不相同,并且由于范围是特定于类型的 ( TYPE RANGE OF <type>),您最终会得到很多没有乐趣编程的过度动态代码。

在构建 WHERE 子句时,请注意以下细节:

  • 授权中的字段名称可能与您选择的列名称不同。您可能需要映射它们。

  • 授权值可能包含占位符*。确保将其转换为 ABAP 运算符CP或 SQL 运算符LIKE。如果该值只是一个星号,您可以忽略该条件,因为它不会限制任何内容。

  • 功能模块接受最多 20 个字符的值,而授权值最多可以是 40 个字符。如果需要全长,功能模块不足。

  • 类似字符串的字段需要将值括在引号中以获得正确的 SQL 语法,而不能将非字符串值(例如整数)括起来以使选择正确。确保为列的类型选择正确的封闭。

  • 我不确定代码检查器是否认为功能模块的组合是安全的。动态 WHERE 子句是 SQL 注入的潜在入侵点。代码检查器通常拒绝将子句组装委托给其他类的控制流。您可能需要使用 class 的方法添加转义cl_abap_dyn_prg


推荐阅读