SAP OPEN SQL

25 篇文章 7 订阅

Open SQL

SELECT, INSERT, UPDATE, DELETE, MODIFY

如果从数据库读出来的数据存在重复时 , 不能存储到 Unique 内表中去 —— 如 Unique 的排序表与哈希表

SELECT

  • SELECT SINGLE … INTO [CORRESPONDING FIELDS OF] wa WHERE …
  • SELECT SINGLE < cols > … INTO (dobj1, dobj2, …) WHERE …
  • SELECT … FROM < tables > UP TO < n > ROWS …
  • SELECT … INTO | APPENDING CORRESPONDING FIELDS OF TABLE < itab > …

INSERT

单条插入 :在插入时是按照数据库表结构来解析 < wa > 结构,与 < wa > 中的字段名无关,所以 < wa > 的长度只少要等于或大于所对应表结构总长度

  • INSERT INTO < tabname > VALUES < wa >
  • INSERT < tabname > FROM < wa >

多条插入 : itab 内表的行结构也必须和数据库表的行结构一致; ACCEPTING DUPLICATE KEYS :如果现出关键字相同条目,系统将 SY-SUBRC 返回 4 ,并跳过该条目,但其他数据会插入进去

  • INSERT < tabname > FROM TABLE < itab > [ ACCEPTING DUPLICATE KEYS ]

UPDATE

单条更新: 会根据数据库表关键字来更新其他非关键字段。如果 WA 工作区是自己定义的且未参照数据库表,则 WA 的结构需要与数据库表相一致,且不能短于数据库表结构,但字段名可任意取

  • UPDATE dbtab FROM wa

多条更新: 主键不会被更新,即使在 SET 后面指定后也不会被更改

  • UPDATE dbtab SET f1 = g1 … fi = gi WHERE < conditions >
  • UPDATE dbtab FROM TABLE itab 与从 WA 工作区单条更新原理一样,根据数据表库关键字段来更新,且行结构要与数据库表结构一致,并且不能短于数据库表结构,一样内表行结构组件名可任意

DELETE

单条删除: 下面的 WA 与 Itab 原理与 Update 是一样的

  • DELETE dbtab FROM wa

多条删除:

  • DELETE dbtab FROM TABLE itab
  • DELETE FROM dbtab WHERE < conditions >

Modify

插入或更新: 下面的 WA 与 Itab 原理与 Update 是一样的

  • MODIFY dbtab FROM wa 单行
  • MODIFY dbtab FROM TABLE itab 多行,有就修改,没有就插入

条件操作符

  • = 、 <> 、 < 、 <= 、 > 、 >=
  • [ NOT ] BETWEEN … AND
  • [ NOT ] LIKE
  • [ NOT ] IN
  • IS [ NOT ] NULL

RANGE 条件内表

两种定义方式:
RANGES seltab FOR dobj [ OCCURS n]. 其中 dobj 为 自定义变量 或者是参照某个表字段
SELECT-OPTIONS selcrit FOR {dobj|(name)}
上面两个语句会生成如下结构的内表,该条件内表的每一行都代表一个逻辑条件 :
DATA : BEGIN OF seltab OCCURS 0 ,
sign TYPE c LENGTH 1 , 允许值为 I 和 E , I 表示包含 Include , E 表示排除 Exclude
option TYPE c LENGTH 2 , OPTION 表示选择运算符 ,
low LIKE dobj , 下界 ,相当于 前面文本框 中的值
high LIKE dobj , 上界 ,相当于 后面文本框中的值
END OF rtab.
option : HIGH 字段为空,则取值可以为: EQ ( = )、 NE ( <> )、 GT ( > )、 GE ( >= )、 LE ( <= )、 LT ( < )、 CP 、 NP , CP (集合之内的数据)和 NP (集合之外数据)只有当在输入字段中使用了通配符(“ * ”或“ + ”)时它们才是有效的

SELECT … WHERE … field [NOT] IN seltab …

如果 RANG 条件内表为空 , 则 IN seltab 逻辑表达试恒为真 , XX NOT IN seltab 恒为假

注: 不会像 FOR ALL ENTRIES 那样 , 忽略其他的条件表达式 , 其他条件还是起作用

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值