点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)专家您好, 我尝试从具有36...
点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)专家您好, 我尝试从具有36...
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
专家您好,
我尝试从具有3600万行的表中复制所有行。 因此,我使用DB游标和PACKAGE SIZE。 到目前为止,它工作正常,但是当我尝试进行INSERT操作时,我会转储。 它发生在插入的100万行中。 有人可以帮我吗? 谢谢。
数据选项卡名称类型objname值'A911'。 数据:lv_n_prozent TYPE numc3, lv_prozent TYPE i。 DATA:db_cursor TYPE游标。 数据:dfies_tab dfies类型表, dfies TYPE dfies, struc_size TYPE i VALUE 0, package_size TYPE i。 FIELD-SYMBOLS:键入任何表。 DATA:数据类型引用数据。 创建数据数据类型表(选项卡名)。 ASSIGN数据-> * TO 。 通话功能" DDIF_NAMETAB_GET" 出口 tabname =标签名 桌子 dfies_tab = dfies_tab 例外情况 not_found = 1 其他= 2。 如果sy-subrc <> 0。 出口。 万一。 环回dfies_tab INTO dfies。 struc_size = struc_size + dfies-leng。 结局。 package_size = 2147483648/struc_size。 DATA current_record TYPE i。 数据(总计记录)= 36000000。 尝试。 按住db_cursor FOR打开游标 选择* FROM(标签名) 绕过缓冲区。 做。 ***提取2gb的数据 获取下一个光标db_cursor 进入表 包装尺寸:package_size。 IF sy-subrc NE 0。 关闭光标db_cursor。 出口。 万一。 从表 插入za911接受重复的键。 current_record = current_record + package_size。 cl_progress_indicator => progress_indicate( i_text = |正在处理:{current_record}/{total_records} | i_output_immediately = abap_true)。 ENDDO。 捕获cx_sy_open_sql_db INTO DATA(cx)。 消息cx-> get_text()类型'E'。 ENDTRY。
(49.2 kB)
您好,
我自己解决了这个问题。 我在插入后添加了...呼叫功能'DB_COMIT'
重要一点!
命令COMMIT WORK重置数据库游标,因此下一次获取不再"知道"最后一个中断的位置。 这就是为什么您应该使用CALL FUNCTION'DB_COMMIT'。
完整的代码看起来像这样。
一周热门 更多>