SAP_ABAP_编程基础_数据库(CRUD)_开放式SQL / 读取数据 / 添加数据 / 更新数据 / 添加或更改数据 /删除数据 / 使用光标读取数据 / 数据簇

SAP ABAP 顾问(开发工程师)能力模型_Terry谈企业数字化的博客-CSDN博客文章浏览阅读487次。目标:基于对SAP abap 顾问能力模型的梳理,给一年左右经验的abaper 快速成长为三年经验提供超级燃料!https://blog.csdn.net/java_zhong1990/article/details/132469977


平时在  ‘ 工地搬砖 ’,很少关注基础技能,闲来无事,拿起来复习一下  ! 

实际在项目中用到的非常之少,所以说学编程,先学框架,在学细节 !,因为细节太多,学不完 !


做JAVA的朋友们,现在项目上基本上用Mybtis , 早几年用Hibernate框架,现在几乎没有用JDBC直接操作数据库。


ABAP领域定义的CRUD,也没有什么特别之处,和SQL语句大致一样 !


 如果说用  ‘CRUD’ 的样式  ,过完这一辈子,朋友们都会有哪些感想呢 ?


1 开放式SQL

(1)SY-SUBRC  ,SQL操作是否成功

(2)SY-DBCNT  ,影响行数


2 读取数据

SELECT <result> FROM <source> [INTO <target>] [WHERE <condition>]
[GROUP BY <fields>] [ORDER BY <sort_order>].

实战中的案例,别看语法,看例子:

SELECT
        mara~zwlcms,
        mara~matnr, "物料描述
        mara~mtart, "物料类型
        mara~meins, "单位
        marc~werks,

        marc~ekgrp,
        marc~dismm,
        marc~dispo,
        marc~sfcpf,
        marc~fevor,

        mvke~vkorg,  "销售组织
        mbew~vprsv,  "价格控制
        mbew~mlast   "物料价格确定: 控制

    INTO CORRESPONDING FIELDS OF TABLE @gt_data
    FROM mara
    LEFT JOIN marc ON marc~matnr = mara~matnr
    LEFT JOIN mvke ON mvke~matnr = mara~matnr AND mvke~dwerk = marc~werks
    LEFT JOIN mbew ON mbew~matnr = mara~matnr AND mbew~bwkey = marc~werks

    WHERE

    mara~matnr     IN @so_matnr
    AND marc~werks IN @so_werks

    .

定义选择结果 SELECT

(1)选择多行中的所有数据 :SELECT [DISTINCT] * ............ENDSELECT.

(2)选择单行中的所有数据:SELECT SINGLE [FOR UPDATE] * ....... WHERE <condition> ......

(3)选择指定列中的所有数据:SELECT [SINGLE [FOR UPDATE]] [DISTINCT] <s1><s2> .....

指定数据表 FROM

(1)在程序中指定数据库表:...... FROM <dbtab> [CLIENT SPECIFIED] [BYPASSING BUFFER]
[UP TO <n> ROWS]......... 

CLIENT SPECIFIED 选项用于关闭自动集团处理
BYPASSING BUFFER 选项使得不用读取 SAP 表缓冲区就可直接读取数据库

(2)在运行时指定数据库表

......FROM (<dbtabname>) [CLIENT SPECIFIED] [BYPASSING BUFFER]
[UP TO <n> ROWS].. INTO <target> .....

该格式的 FROM 子句只能与 INTO 子句一起使用。

指定目标区 INTO

(1)将数据读到工作区  SELECT ... INTO <wa> ............

(2)将数据读到内表 SELECT .....INTO TABLE <itab>.

(3)将数据读到预定义包大小的内表  SELECT * .....INTO TABLE <itab> PACKAGE SIZE <n>.....

(4)将数据行附加到内表中 SELECT ..... APPENDING TABLE <itab>.....

(5)逐个组件的读取数据 

SELECT ... INTO CORRESPONDING FIELDS OF <wa> ........

SELECT ... INTO CORRESPONDING FIELDS OF TABLE <itab> ........

SELECT ... APPENDING CORRESPONDING FIELDS OF TABLE <itab> ........

选择读取行 WHERE

(1)在程序中为行选择指定条件 ..... WHERE <condition> ........

(2)使用逻辑链接操作符组合条件


3 添加数据

添加单一行 INSERT INTO <dbtab> [CLIENT SPECIFIED] VALUES <wa>.

添加多行 

INSERT <dbtab> [CLIENT SPECIFIED] FROM TABLE <itab> [ACCEPTING DUPLICATE KEYS].


4 更新数据

更新单一行 

UPDATE <dbtab> [CLIENT SPECIFIED] FROM <wa>.  工作区<wa>中的内容将覆盖数据库表<dbtab>的行,
该数据库表与<wa>具有相同的主码。

没有指定工作区<wa>。
但表工作区<dbtab>中的内容将覆盖具有相同主码的数据库表的行。

UPDATE <dbtab> [CLIENT SPECIFIED].

更新多行 

UPDATE <dbtab> [CLIENT SPECIFIED] SET <S1> ..<Sn> [WHERE <condition>].

使用内表更新多行

UPDATE <dbtab> [CLIENT SPECIFIED] FROM TABLE <itab>.

UPDATE (<dbtabname>) [CLIENT SPECIFIED] FROM TABLE <itab>.


5 添加或更改数据

插入单行

MODIFY <dbtab> [CLIENT SPECIFIED] [FROM <wa>].

MODIFY (<dbtabname>) [CLIENT SPECIFIED] [FROM <wa>].

插入多行

MODIFY <dbtab> [CLIENT SPECIFIED] FROM TABLE <itab>.

MODIFY (<dbtabname>) [CLIENT SPECIFIED] FROM TABLE <itab>.


6 删除数据

删除单行 

DELETE <dbtab> [CLIENT SPECIFIED] FROM <wa>.

DELETE <dbtab> [CLIENT SPECIFIED].

删除多行

DELETE FROM <dbtab> [CLIENT SPECIFIED] WHERE <conditions>.

DELETE FROM (<dbtabname>) [CLIENT SPECIFIED] WHERE <conditions>.

使用内表删除多行

DELETE <dbtab> [CLIENT SPECIFIED] FROM TABLE <itab>.

DELETE (<dbtabname>) [CLIENT SPECIFIED] FROM TABLE <itab>.


7 使用光标读取数据 ,

非常像ORACLE 的游标

打开光标

OPEN CURSOR [WITH HOLD] <c> FOR SELECT ........ [WHERE <conditions>].

用光标读取数据

FETCH NEXT CURSOR <c> INTO <target>.

关闭光标

CLOSE CURSOR <c>.

下列情况将自动关闭光标:
1)执行 COMMIT WORK 或 ROLLBACK WORK 语句时;
2)当执行自身的 SQL 数据库提交或取消时;
3)更改屏幕时;
4)执行远程功能调用时。
如果在 OPEN CURSOR 语句中使用 WITH HOLD 选项,
自身的 SQL 中的数据库提交将不会关闭光标。


8 数据簇

向内存中存储数据对象

 EXPORT <f1> [FROM <g1>] <f2> [FROM <g2>] ... TO MEMORY ID <key>.

从内存中读取数据对象

IMPORT <f1> [TO <g1>] <f2> [TO <g2>] ... FROM MEMORY ID <key>.

删除内存中的数据簇

FREE MEMORY [ID <key>]. 

如果不附加 ID <key>,则此语句删除整个内存。
包括此前用 EXPORT 存储到 ABAP/4 内存中的所有数据簇。
附加 ID <key>之后,该语句只删除用此名称命名的数据簇。
因为删除整个内存会导致任何系统例程内存内容的丢失,所以应只使用附加有 ID 的 FREE MEMORY 语句。

  • 20
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Terry谈企业数字化

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值