插入
1.insert ***(数据库表) from table t_tab(内表) ACCEPTING DUPLICATE KEYS.(自动跳过已存在相同KEY值行)
更新
1.update ***(数据库表)set field(数据库表字段) = ** where field2(数据库表字段) = *
修改
1.modify ***(数据库表) from WA(结构) [有相同KEY值就修改,没有就更新]
2.modify *(数据库表) from table t_tab.
删除
1delete from ***(数据库表)where field = **.
2.delete *(数据库表) from table t_tab.
数据库保持一致性
1.锁对象
多人操作同一张数据库表时,就要用锁,SAP里分S ,E,X,三个级别的锁对象。
a.se11 创建锁对象,注意锁对象名称E开头,再加上的表名
b.创建时勾选RFC复选框,可远程调用该锁对象
c.锁模式下拉框,可选可不选。就算是选择了也只是当你调用锁函数时默认了该锁的模式,还是可以根据入参改变
d.如何查找你创建的锁函数?SE37>*&你创建的锁名称>点击放大镜
会有两个函数,一个是锁定,一个是解锁
e.SAP还提供了通用锁函数ENQUEUE_E_TABLE
2.操作数据库语句时写入子例程里 带上on commit
(例如:)
perform set_db on commit.
"注意此时Perform 不能传任何参数,这是用此语法的缺点
perform set_db.
update ztab set txt = lv_txt where matnr = lv_matnr
endprtform
commit work.
"当执行到commit时,程序会自动把上面所有操作语句
"真正的更新到数据库
3.上述也说了on commit的缺点,SAP也提供了相应的解决方法。不过要麻烦点。
a.创建相关执行数据库操作的函数
b.调用函数时带上语句:in update task
c.commit
(例如)
perform set_db using wa.
perform set_db using l_wa.
call function 'ZUPDATE' in update task
exporting
wa = l_wa
endprtform
commit work.