查找内部表的字段的值(如果它可以包含空白或null)

2020-08-31 01:48发布

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

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


专家们,

我在DDIC中有一个表,其中的列都包含空白和空值。 使用SAP Logon,我们无法区分两者。 因此,我编写了以下程序,如果我在where条件(请参阅程序)中使用null,否则可以获取条目,否则为0条目(如果为空白)。

我正在尝试使用" IS NOT INTIAL"检查包含null的字段的值。 但是它永远不会进入if块,这意味着test2不为null。

所以我有以下问题:

1。)当我们从内部表中的SAP数据库传输数据时,空值(在sap数据库中存在)发生了什么。 内部表字段是否还包含空值,或者它们会初始化?

2。)我正在使用" IS NOT INTIAL"来检查字段是否具有空值。 还有其他方法可以检查吗?

在用户界面中显示为:

表:ZTEST_NEERAJ

| ID | NAME | AGE | TEST | TEST2 |

| 1 | NEERAJ | 45 | 0 | |

| 2 | | 45 | 0 | |

实际情况如下:

表:ZTEST_NEERAJ

| ID | NAME | AGE | TEST | TEST2 |

| 1 | NEERAJ | 45 | 0 | NULL |

| 2 | | 45 | 0 | NULL |

功能ZSQL_QUERY2。
*" --------------------------------------- -------------------------------
*" *"本地接口:
*" EXPORTING
*"参考(DBCNT)类型SY-DBCNT
*" ----------------------------------- -----------------------------------


数据:TABLE1类似于TABLE OF 带有标题行的ZTEST_NEERAJ初始大小10。

从ZTEST_NEERAJ到表TABLE1中选择*,其中test2为NULL。


DBCNT = SY-DBCNT。

读取表TABLE1索引1。

数据:X TYPE I值0。
如果TABLE1-test2不初始。
X =1。
ENDIF。

ENDFUNCTION。

谢谢

Partish

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

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


专家们,

我在DDIC中有一个表,其中的列都包含空白和空值。 使用SAP Logon,我们无法区分两者。 因此,我编写了以下程序,如果我在where条件(请参阅程序)中使用null,否则可以获取条目,否则为0条目(如果为空白)。

我正在尝试使用" IS NOT INTIAL"检查包含null的字段的值。 但是它永远不会进入if块,这意味着test2不为null。

所以我有以下问题:

1。)当我们从内部表中的SAP数据库传输数据时,空值(在sap数据库中存在)发生了什么。 内部表字段是否还包含空值,或者它们会初始化?

2。)我正在使用" IS NOT INTIAL"来检查字段是否具有空值。 还有其他方法可以检查吗?

在用户界面中显示为:

表:ZTEST_NEERAJ

| ID | NAME | AGE | TEST | TEST2 |

| 1 | NEERAJ | 45 | 0 | |

| 2 | | 45 | 0 | |

实际情况如下:

表:ZTEST_NEERAJ

| ID | NAME | AGE | TEST | TEST2 |

| 1 | NEERAJ | 45 | 0 | NULL |

| 2 | | 45 | 0 | NULL |

功能ZSQL_QUERY2。
*" --------------------------------------- -------------------------------
*" *"本地接口:
*" EXPORTING
*"参考(DBCNT)类型SY-DBCNT
*" ----------------------------------- -----------------------------------


数据:TABLE1类似于TABLE OF 带有标题行的ZTEST_NEERAJ初始大小10。

从ZTEST_NEERAJ到表TABLE1中选择*,其中test2为NULL。


DBCNT = SY-DBCNT。

读取表TABLE1索引1。

数据:X TYPE I值0。
如果TABLE1-test2不初始。
X =1。
ENDIF。

ENDFUNCTION。

谢谢

Partish

付费偷看设置
发送
5条回答
Baoming ROSE
1楼 · 2020-08-31 02:12.采纳回答

如果该值为NULL,则也许可以改用一个不太可能发生的值,然后使用 COALESCE 函数:

选择合并(test2,'!%µ£$;,:')作为test2
   来自ZTEST_NEERAJ
   INTO TABLE @ TABLE1。
小灯塔
2楼-- · 2020-08-31 02:16

(下面,我假设您的列具有类型字符,所以我使用术语BLANK,我可能使用术语INITIAL来区分类型)

因为ABAP将NULL值转换为BLANK,所以您不应该允许表列同时包含NULL和BLANK。

此外,ABAP只能写入BLANK值,因此只能选择BLANK。

p>

哎,真难
3楼-- · 2020-08-31 02:15

你好Sandra Rossi,

谢谢您的启发。

是的,它是char类型。

我知道我们不应该同时包含null和blank,但是我们已经有了现有的数据,并且正在执行数据的提取和加载。 在执行ETL时,我们必须将数据放入内部表中。

也请提供任何引用帮助您说明" ABAP将null转换为空格"的信息。

谢谢

Partish

hengyuye
4楼-- · 2020-08-31 02:32

简单/愚蠢的解决方案可能是使用另一个具有VALUE_NULL的布尔字段

Tong__Ming
5楼-- · 2020-08-31 02:18
Partish Singla 我想您是对的,因为它已经转换为相应字段的初始值,所以会占用一些内存。 也许您必须编写本机sql才能将null值首先转换为某些特殊字符。

一周热门 更多>