只有 SELECT , INSERT,UPDATE,DELETE 有对应的OPENSQL
SELECT 读取
INSERT 插入
UPDATE 修改
MODIFY 插入或修改
DELETE 删除
SY-SUBRC: 所有Open SQL 在执行成功时返回0,否则返回非0
SY-DBCNT: 在执行Open SQL 语句后,返回受影响的数据条数
SELECT (MAX,MIN,AVG,SUM,COUNT,COUNT(*) col )
from dbtab (as …)
(inner join ,left jion ,outer join )
into corresponding fields of
for all entries in tab col
where
(col between dobj1 and dobj2
col like
col in
col is not null)
( group by)
读取单行
select single col into corresponding fields wa where…
CORRESPONDING FIELDS OF
SELECT…INTO [CORRESPONDING FIELDS OF] …
该语句读取一条数据到结构 中。 只能使用 SINGLE 选项或与 ENDSELECT 一起使用
如果没有 CORRESPONDING FIELDS OF 选项, 结构至少 要大小或等于SELECT语句选择所有字段长度。
如果加上了 CORRESPONDING FIELDS OF 选项选择,则会从数据库查询出来的字段值存储到 结构中同名字段中,此种情况是根据SELECT 从句选择字段名与 结构 中组件字段名来映射的,SELECT 从句所选择字段个数可以大于或小于,等于 结构中的字段个数。
SELECT … INTO (dobj1,dobj2,…)
追加读取 APPENDING
SELECT …INTO (APPENDING)
ABAP SELECT到内表的两种方法
SELECT *
APPENDING CORRESPONDING FIELDS OF TABLE A
FROM B
每次取出数据会追加到内表A
SELECT *
INTO CORRESPONDING FIELDS OF TABLE A
FROM B
每次去到数据都会先清空内表A再存进去
填充内表
要填充内表,既可以逐行添加数据,也可复制另一个表格的内容。要逐行填充内表,可以使用APPEND,COLLECT或者INSERT语句
要将内表仅用于存储数据,出于性能方面的考虑,建议使用APPEND.
要将行附加到内表中,使用APPEND语句,用法如下;
APPEND (wa to initial line to) itab
该语句将新行附加到内表 中。
将数据读到内表
SELECT …INTO TABLE
将数据行附加到内表中
为了避免覆盖内表中的内容,可以将所选行附加到此表中。为此,按如下格式使用APPENDING子句,而不是INTO
子句:
SELECT…APPENDING TABLE …
与上面描述的INTO子句的唯一区别是它是将行附加到内表中,而不是替换。
逐个组件的读取数据
要一个组件接一个组件地将数据读到目标区中,请使用 INTO子句的 CORRESPONDING FIELDS选项。语法如下所示:
对于将数据读到工作区中:
SELECT…INTO CORRESPONDING FIELDS OF
对于将数据读到内表中:
SELECT…INTO CORRESPONDING FIELDS OF TABLE
对于将数据附加到内表中:
SELECT…APPENDING CORRESPONDING FIELDS OF TABLE
这些语句不会将所选行的所有字段放进目标区中。系统只将列的内容传送到目标区的对应组件中。如果可能,在传送过程中,可将值转换成目标字段的数据类型。
AT…ENDAT行组控制级别
用控制级别语句 AT 可以语句块,用控制级别语句 ENDAT可以关闭它。语法如下所示:
AT
ENDAT.
处理 AT-ENDAT 内语句块的行条件
FIRST 内表的第一行
LAST 内表的最后一行
NEW 行组的开头,与字段和剩余字段中的内容相同
END OF 行组的结尾,与字段和剩余字段中的内容相同
AT-ENDAT 块中的语句块使用这些行条件代表预定义的控制结构。用户可以使用它们处理内表中的控制断点,而不必使用编程分支和循环中所述的语句自己编程。
AT NEW f
使用AT NEW f 和AT END OF f时需要注意
(1) f 必须是内表的第一个字段
(2) 内表中f之后的 字段的值都会编程 “*”
使用AT NEW AT FIRST, AT LAST,AT END OF 时需注意
选择屏幕的PBO
要在每个ENTER的选择屏幕PBO中启动过程快,使用下列 AT SELECTION-SCREE-SCRR语句:
AT SELECTION-SCREEN OUTPUT.
START-OF-SELECTION
AT SELECTION-SCREEN
处理特殊输入字段
要在处理选择屏幕的特殊输入字段之后启动过程块:需要按下列方法使用关键字 AT SELECTION 屏幕:
AT SELECTION ON
INITIALZATION
启动已定义选择屏幕的程序时,系统通常首先处理此选择屏幕。如果希望在处理选择屏幕之前执行过程块,可以把它分配到事件关键字 INITIALIZATION.
在此块中,指定初始化选择屏幕而定语句。
定义页眉
要分别定义页眉的格式,必须在紧随事件关键字 TOP-OF-PAGE的处理块中定义:
TOP OF PAGE. WRITE :…
TOP-OF-PAGE. WRITE:…
TOP-OF-PAGE 事件在系统开始处理列表新页时出现。系统在输出新页首行之前处理 TOP-OF-PAGE后面的语句。
自定义页眉出现在标准页眉之下。如果要取消标准页眉,使用PERPORT语句的 NO STANDARD PAGE HEADING 选项:
REPORT
paramaters
可以按照用DATA语句声明字段的方式用 parameters 语句声明字段。 用 parameters 语句声明的字段称为参数。
通常,输入字段的所有参数都将出现在选择屏幕上。系统处理输入屏幕时,报表用户在这些输入字段中键入的值将
被分配给相应的参数。
要声明参数及其数据类型,使用PARAMETERS语句,如下所示:
PARAMETERS
该语句创建参数
附加项, 和与 DATA语句相同。
with frame选项
要在选择屏幕上创建元素逻辑块,使用SELECTION-SCREEN 语句的BEGIN OF BLOCK 选项选择快的开始,然后
定义各个元素并用 END OF BLOCK 选项选择快的结束, 如下所示:
SELECTION-SCREEN BEIN OF BLOCK [WITH FRAME [TITLE title]]
如果增加 WITH FRAME 选项, 在块的周围将画外框。
RADIOBUTTON GROUP 创建单选按钮
要为参数输入定义单选按钮组 使用 PARAMETERS 语句的 RADIOBUTTON GROUP 选项
语法如下:
PARAMETERS
RADIOBUTTON GROUP
参数
按类型C , 长度1 创建 ,并分配到组。 字符串 的最大长度是4.允许使用附加的like
选项,但是必须参阅类型为C ,长度为1的字段。必须为每个 组分配至少两个参数,
每个组只有一个参数可以用DEFAULT选项分配的缺省值,该值必须是’X’.
当用户单击选择屏幕中的单选按钮时,相应的参数被激活(分配值’X’),同时同组的其他参数被设为非活动的
(赋值 ’ ').
读取数据
要从数据库表读取数据,使用SELECT语句:
SELECT 定义选择的结果
FROM 指定将读取的数据库表
INTO 选定数据指定目标区
WHERE 选择即将读取的行
GROUP BY 行分组
ORDER BY <sort_order> 指定行的顺序
FOR ALL ETRIES IN 将选择条件块并且开来
要在运行时指定一系列条件来选择一定数目的特定行,可在SELECT 语句中使用下列 WHERE 子句的特殊变式::
SELECT…FOR ENTRIES IN WHERE …
在条件 中, 可按前面的叙述将内部字段或字母指定为比较值。
也可以将内表的列 或字母用作比较值。
在WHERE 条件中,这些列将用作占位符。
该SELECT 语句的结果集是SELECT 语句的所有结果集的联合,这些结果集是用中的相应值在
每一行上替换占位符的的结果,将从结果集中删除重复行。
对比 into corresponding , for entries 很耗内存,尽量少用,
并且for entries 进入的是 itab 即表 into corresponding 进入的是工作区 wa
APPEND [ TO | INITIAL LINE TO ]
要将行附加到内表中,使用APPEND语句,用法如下:
APPEND [ TO | INITIAL LINE TO ]
该语句将新行附加到内表 中。
select * into table gt_mardh from mardh where matnr in s_matnr and werks in s_werks
and lgort in s_lgort and ((lfgja =gv_lfgja and lfmon ge gv_lfmon)) or lfgja >gv_lfgja).
sort gt_mardh by matnr werks lgort lfgja lfmon.
select 语句
- select
- 只读一条数据时 select single
- 读多条数据时:
select [distinct] into table
select [distinct] into 时, 用 endselect. - as (别名)
- 动态 select 语句 ,保存动态语句的变量用CHAR类型,最大72位,如果超过72位,可用 table
into 语句
INTO 用于指定存储 select 语句查询结果的目的地
1.第一次可以用 into ,第二次就用appending
select * into table lt_flight from sflight where carrid = ‘AA’ and connid = ‘0017’ .
select * appending table lt_sflight from sflight where carrid = ‘AA’ and connid =‘0064’.