AMDP数据库功能-NULL不起作用

2020-08-20 23:45发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好,

我在AMDP中使用标记了CDS表函数的逻辑。 我可以使用表函数访问数据,并且没有任何问题。 我的问题是EKKO.LOEKZ =''。 这种情况不起作用。 我曾尝试使用 IS NULL LOEKZ ='',但是在这种情况下不会过滤记录。 当我在HANA存储过程中使用相同的查询时,这些空条件可以正常工作而没有任何问题,并且可以过滤数据。 请让我知道在where子句中使用NULL或空白时是否需要照顾AMDP或数据库功能。

 CLASS zcl_openpo_amdp定义
   上市
   最后
   创建公众。
   公共部分。
     接口:if_amdp_marker_hdb。
     CLASS-METHODS get_po用于表功能zibp_cdstf_openpo。
   受保护的部分。
   专用部分。
 ENDCLASS。

 类别zcl_openpo_amdp实施。
   HDB语言SQLSCRIPT选项的数据库功能方法get_po只读。
     lt_openpo =选择ekpo.matnr作为产品,选择ekpo.werks作为产品,
                                    来自" SCHEMA1"。" EKPO"作为ekpo内部加入" SDIERP"。" EKKO"作为ekko在ekko.mandt = ekpo.mandt上
                                                      ekko.ebeln = ekpo.ebeln
                                                  ekko.bsart在('NB','KV')和
                                                          ekko.loekz ='';
      返回:lt_openpo;
   终结法。
 ENDCLASS。
 

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好,

我在AMDP中使用标记了CDS表函数的逻辑。 我可以使用表函数访问数据,并且没有任何问题。 我的问题是EKKO.LOEKZ =''。 这种情况不起作用。 我曾尝试使用 IS NULL LOEKZ ='',但是在这种情况下不会过滤记录。 当我在HANA存储过程中使用相同的查询时,这些空条件可以正常工作而没有任何问题,并且可以过滤数据。 请让我知道在where子句中使用NULL或空白时是否需要照顾AMDP或数据库功能。

 CLASS zcl_openpo_amdp定义
   上市
   最后
   创建公众。
   公共部分。
     接口:if_amdp_marker_hdb。
     CLASS-METHODS get_po用于表功能zibp_cdstf_openpo。
   受保护的部分。
   专用部分。
 ENDCLASS。

 类别zcl_openpo_amdp实施。
   HDB语言SQLSCRIPT选项的数据库功能方法get_po只读。
     lt_openpo =选择ekpo.matnr作为产品,选择ekpo.werks作为产品,
                                    来自" SCHEMA1"。" EKPO"作为ekpo内部加入" SDIERP"。" EKKO"作为ekko在ekko.mandt = ekpo.mandt上
                                                      ekko.ebeln = ekpo.ebeln
                                                  ekko.bsart在('NB','KV')和
                                                          ekko.loekz ='';
      返回:lt_openpo;
   终结法。
 ENDCLASS。
 
付费偷看设置
发送
4条回答
当学会了学习
1楼-- · 2020-08-21 00:03

我相信您正在排除已删除的项目。 使用以下语句

 LOEKZ <>'X'或

 NOT LOEKZ ='X'

此致

Venkat

木偶小白
2楼-- · 2020-08-21 00:22

Hi Siva,

您确定在引号之间没有留出多余的空格吗?

在摘要中,您使用的是loekz =''而不是loekz =''。

代楠1984
3楼-- · 2020-08-21 00:26

Siva Kalaiselvan

请注意,SPACE和NULL之间是有区别的。

让我用一个小例子来说明。

考虑一下 包含两个字段F1和F2的表,可以说我们向该表添加了5个条目。

现在您有一个包含2个字段和5个条目的表。 假设我们将另一个字段F3添加到该表中,而如果未选中IS INITIAL复选框,则添加此字段,则所有当前存在的条目将为字段F3保留NULL值。

现在,如果添加第六个条目而不填充F3,则该字段将保留空格值。

因此在上述情况下,如果使用IS NULL查询,将获得5个条目;如果使用Space查询,则将获得 一个条目。 如果在添加新字段F3时选中了" IS INITIAL"复选框,则所有条目都将保留空格值,并且不会有任何NULL值。

希望这解释了NULL和SPACE之间的区别。/p>

现在回到您的问题,我的以下代码运行正常。 粘贴以供您参考:

 CLASS zscn_class定义
   上市
   最后
   创建公众。
   公共部分。
 * AMDP需要此接口才能工作
     接口if_amdp_marker_hdb。

     类方法:
       ztest_scn FOR TABLE函数zscn_demo。

   受保护的部分。
   专用部分。
 ENDCLASS。

 CLASS zscn_class IMPLEMENTATION。
   通过数据库功能的方法ztest_scn
                   对于HDB语言
                   SQLSCRIPT选项只读
                   使用ekko ekpo。
     lt_openpo =选择ekko.mandt作为mandt,
                        ekpo.matnr作为matnr,
                        ekpo.werks奇怪,
                        ekko.loekz作为loekz
                 来自ekko作为ekko内部加入ekpo作为ekpo
                 在ekko.mandt = ekpo.mandt上
                    ekko.ebeln = ekpo.ebeln和
                    ekko.loekz ='';
      返回:lt_openpo;
   终结法。
 ENDCLASS。
 

很少有建议:

1)我看不到任何USING子句作为您方法实现的一部分,这是必需的。

2)都检查一下

3)尝试使用其他表示法。 (例如,不等于X)

希望信息对您有所帮助!

致谢!

落灬小鱼
4楼-- · 2020-08-21 00:07

您说"不起作用"和"不起作用" 在这种情况下被过滤掉了",但您不会说您得到了什么。 您是说得到"零行"还是"就好像LOEKZ =''不在那儿"还是其他?

此外,LOEKZ =''和LOEKZ IS NULL的条件完全不同并返回 完全不同的行,但是您没有解释两种情况下的结果。

使用不同的SCHEMA1和SDIERP模式是正常的吗?

一周热门 更多>