当前位置: 首页 > news >正文

ABAP SQL更新DB小技巧 WITH INDICATORS

在使用HTTP服务时我们更新数据时经常会使用到PUT或者PATCH,PUT的更新是完全以传入的字段信息为准,没有记录时进行创建,存在记录时完全依据传入的数据进行覆盖更新,而PATCH则是可以仅更新指定字段,而不影响其他字段,那在ABAP SQL中其实也有同样的功能,只是大多数时候都是为了方便直接使用了MODIFY语法进行更新(等同于PUT),这就要求如果是要更新记录时,你需要先获取目标数据的完整字段值信息,将你想更改的字段的值修改后,再次更新,那在ABAP Release 758之后,是可以使用WITH INDICATORS来达到PATCH更新的效果的,下面用一个简单的例子来说明下这个小技巧。


创建一张测试表:

TYPES定义更新结构:

TYPES:ty_dn_ind TYPE ztest_upd_ind WITH INDICATORS ind,tt_dn_ind TYPE SORTED TABLE OF ty_dn_ind WITH UNIQUE KEY id.

此处使用WITH INDICATORS关键字定义了一个更新结构,为了方便起见,直接debug看一下定义出来的结构就一眼明白这样定义的效果:

ind用来指定定义的结构名称,而这个结构的字段和定义的字段完全一致,只是默认类型是X类型,该结构的用处是在更新数据库表格时,起到一个控制的作用,只有当ind结构中对应的字段设置为01时,才会更新此字段,否则不进行任何更新,这个作用类似于BAPI中的X结构,熟悉RAP开发的顾问应该也已经联想到了,等同于EML语法更新BO时的%control结构。

实际使用例子:

*&---------------------------------------------------------------------*
REPORT ztest_update_db_with_ind.TYPES:ty_db_ind TYPE ztest_upd_ind WITH INDICATORS ind,tt_db_ind TYPE SORTED TABLE OF ty_db_ind WITH UNIQUE KEY id.DATA:lt_ins TYPE tt_db_ind,ls_ind TYPE ty_db_ind,lt_upd TYPE tt_db_ind,is_ind TYPE ty_db_ind.DELETE FROM ztest_upd_ind.lt_ins = VALUE #( ( id = '1' field1 = 'test1' field2 = 'test2' field3 = 'test3' ) ).INSERT ztest_upd_ind FROM TABLE @lt_ins.COMMIT WORK AND WAIT.
BREAK-POINT.lt_upd = VALUE #( ( id = '1' field1 = 'test1->change' ind-field1 = '01' ) ).UPDATE ztest_upd_ind FROM TABLE @lt_upd INDICATORS SET STRUCTURE ind.COMMIT WORK AND WAIT.
BREAK-POINT.

以上代码第一步,先清空测试表,然后插入一条测试数据:

然后构建更新内表,在设置主键之后,我们仅更新FIELD1字段,并且为FIELD1的控制字段设置为01,可以看到在更新之后,底表中仅FIELD1字段进行了变更,其他字段不受影响。

 当然这个控制结构的类型可以使用关键字TYPE自行执行,比如WITH INDICATORS ind TYPE abap_boolean,这样一来控制结构的类型就不再是00或者01来控制,而是abap_trueabap_false来控制,但是建议还是使用默认的类型,这样一来在RAP有些场景需要动态处理时,可以快速的进行mapping。

以上。

http://www.lryc.cn/news/608606.html

相关文章:

  • [硬件电路-151]:数字电路 - 模拟电路与数字电路的本质
  • MySQL Redo Log
  • GitLab 代码管理平台部署及使用
  • lua中 list.last = last 和list[last]=value区别
  • JavaScript:编程世界中的“语盲”现象
  • 回归的wry
  • 关于vllm【常见问题解决方案】
  • vllm0.8.5:自定义聊天模板qwen_nonthinking.jinja,从根本上避免模型输出<think>标签
  • 【python实用小脚本-169】『Python』所见即所得 Markdown 编辑器:写完即出网页预览——告别“写完→保存→刷新”三连
  • k8s+isulad 国产化技术栈云原生技术栈搭建1-VPC
  • OSPF HCIP
  • Starrocks ShortCircuit短路径的调度
  • 华为云云服务高级顾问叶正晖:华为对多模态大模型的思考与实践
  • 基于云模型的模糊综合风险评估Matlab代码
  • Matlab 高斯牛顿法拟合曲线
  • K8S部署ELK(四):部署logstash
  • MATLAB小波分析工具包进行时间序列的小波功率谱分析
  • 后端研发转型爬虫实战:Scrapy 二开爬虫框架的避坑指南
  • 量子物理学的前沿意义虚无、形式混乱
  • 0803 思维导图+小项目
  • Python爬虫实战:研究awesome-python工具,构建技术资源采集系统
  • uniapp 跨端开发
  • 机器学习——下采样(UnderSampling),解决类别不平衡问题,案例:逻辑回归 信用卡欺诈检测
  • 什么是shebang
  • Java基础:代码块/内部类/Lambda函数/常用API/GUI编程
  • JavaEE初阶第十三期:解锁多线程,从 “单车道” 到 “高速公路” 的编程升级(十一)
  • 自动驾驶中的传感器技术20——Camera(11)
  • 【MATLAB】(六)多项式的创建与四则运算
  • TCP-单线程版本
  • pytorch 安装