opensql

19 篇文章 3 订阅

只有 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 语句

  1. select
  2. 只读一条数据时 select single
  3. 读多条数据时:
    select [distinct] into table
    select [distinct] into 时, 用 endselect.
  4. as (别名)
  5. 动态 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’.

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值