点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
你好
我注意到ABAP的一种举动使我感到惊讶,但我对此一无所获。
当我尝试通过分配内联声明字段符号的LOOP或READ访问分配给通用类型标准表类型的字段符号的内部表的表行时,即使 表为空,将(未知)存储区分配给字段符号。
SY-SUBRC正确设置为4,但是字段符号已分配。
我写了一个演示程序来说明这一点。
报告zffs_test。 类型:开始于ty_table, TYPE I, ty_table的结尾。 ty_table的数据gt_table TYPE STANDARD TABLE。 数据子类型C长度1。 字段符号:TYPE STANDARD TABLE, TYPE任意, TYPE任意。 选择开始。 *将GT_TABLE分配给通用表类型的字段符号 将gt_table分配到 。 *示例1。 1-回路ITAB。 2- INLINE声明的字段符号。 *结果:SY-SUBRC =4。未分配字段sybol。 好。 在gt_table ASSIGNING FIELD-SYMBOL( )处循环播放。 结局。 subrc = sy-subrc。 写:"示例1-循环1"。 写:/'SY-SUBRC =',subrc NO-GAP,'。' 。 如果已分配 。 写:'从来没有按预期写过'。 其他。 写:'未分配,按预期方式。 万一。 *示例2。 1-循环AT 。 2-先前声明的字段符号。 *结果:SY-SUBRC =4。未分配字段sybol。 好。 循环 分配 。 结局。 subrc = sy-subrc。 跳跃。 写:/"示例2-循环2"。 写:/'SY-SUBRC =',subrc NO-GAP,'。' 。 如果已分配 。 写:'从来没有按预期写过'。 其他。 写:'未分配,按预期方式。 万一。 *示例3。 1-循环AT 。 2- INLINE声明的字段符号。 *结果:SY-SUBRC =4。分配了字段sybol。 挪威克朗 在 分配字段符号( )上循环。 结局。 subrc = sy-subrc。 跳跃。 写:/" Example3-Loop 3"。 写:/'SY-SUBRC =',subrc NO-GAP,'。' 。 如果已分配 。 写:"已分配!"。 万一。 *示例4。 1-阅读表ITAB。 2- INLINE声明的字段符号。 *结果:SY-SUBRC =4。未分配字段sybol。 好。 读取表gt_table ASSIGNING FIELD-SYMBOL( )索引1。 subrc = sy-subrc。 跳跃。 写:/'Example4-读1'。 写:/'SY-SUBRC =',subrc NO-GAP,'。' 。 如果已分配 。 写:'从来没有按预期写过'。 其他。 写:'未分配,按预期方式。 万一。 *示例5。 1-循环AT 。 2-先前声明的字段符号。 *结果:SY-SUBRC =4。未分配字段sybol。 好。 读取表 分配 索引1。 subrc = sy-subrc。 跳跃。 写:/'Example5-Read 2'。 写:/'SY-SUBRC =',subrc NO-GAP,'。' 。 如果已分配 。 写:'从来没有按预期写过'。 其他。 写:'未分配,按预期方式。 万一。 *示例6。 1-循环AT 。 2-先前声明的字段符号。 *结果:SY-SUBRC =4。未分配字段sybol。 好。 读取表 分配字段符号( )索引1。 subrc = sy-subrc。 跳跃。 写:/'Example6-Read 3'。 写:/'SY-SUBRC =',subrc NO-GAP,'。' 。 如果已分配 。 写:"已分配!"。 ENDIF。
输出:
在调试器中,您可以看到将
文档说:
"如果分配成功,则sy-subrc设置为0; 如果没有,则设置为4。"
是的,那会发生什么。 虽然:
"如果分配不成功,则字段符号将保持其先前状态。 因此仅在动态ASSIGN中评估谓词表达式
先前未声明的字段符号的先前状态实际上是未分配的,但是已声明内联声明的字段符号的先前状态。
如果有人对此有所了解,我将不胜感激。
谢谢。
Update1:给出更多示例。 输出已给出。
(9.7 kB)
一周热门 更多>