版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
如何读取并处理数据库表
概览
内容
数据库表与SQL概念..................................................................1
从数据库表读取数据...................................................................3
定义选择的结果....................................................................3
指定将读取的数据库表.............................................................6
为选定数据指定目标区..............................................................8
选择马上读取的行..................................................................10
给行分组...........................................................................14
指定行的顺序......................................................................15
更换数据库表的内容...................................................................16
向数据库表添加行..................................................................16
在数据库表中更换行................................................................18
添加或者更换行....................................................................20
从数据库表中删除行................................................................21
使用光标从数据库表中读取行..........................................................22
打开光标..........................................................................23
用光标读取数据....................................................................23
假如FETCH语句没有读取任何行,SY-SUBRC就设置为4,否则设置为0。关闭光标23
使用光标读取数据的示例...........................................................23
确认或者取消对数据库表的更换........................................................24
为数据库表处理指定集团..............................................................25
在ABAP/4程序中使用本地的SQL语句................................................26
在ABAP/4程序的执行过程中锁定数据库对象...........................................27
检查ABAP/4程序用户的权限..........................................................27
本节讲述下列主题:
ABAP/4中的SQL概念
ABAP/4的开放式SQL
ABAP/4自身的SQL
锁定与授权
在处理来自数据库表的大量数据时,程序的运行时间就成了影响性能的重要因素。有关如
何达到最优性能的示例,请选择ABAP/4开发工作台中的“测试今实时分析"(或者使用
事务SE30),并选定“提示与策略”。在“SQL界面”下,将可找到关于本节的适当示
例。
数据库表与SQL概念
在R/3系统中,需长期储存的数据都存储在关系数据库表中。关于各类类型的数据库表与如何创建与保护
它们的信息,参见文档ABAP/4词典(页Error!Notavalidlink.)„
结构化查询语言(SQL)是为访问关系数据库创建的。SQL有两个语句类型:数据定义语言(DDL)语句与数
据操作语言(DML)语句。
a
现在,SQL还没有完全标准化。要访问指定的数据库系统,务必查阅该系统的文档,以获取可用的SQL语
句及其正确的语法的列表。
要在ABAP/4程序中包含这些SQL语句,请使用自身的SQL(参见在ABAP/4程序中使用本地的SQL语
句(页29))。
为了避免不同的数据库表之间的不兼容性,并使ABAP/4程序能在应用中独立于数据库系统,SAP创建了
一套叫作开放式SQL的独立SQL语句。开放式SQL包含了一套标准的SQL语句与一些专用于SAP的增
强语句。使用开放式SQL,可以访问对SAP系统有效的任何数据库表,而不用考虑它的创建者。
下图显示了开放式SQL与自身的SQL之间的区别:
数据库界面可将SAP的开放式SQL语句翻译成专用于现正使用的数据库的SQL命令。自身的SQL直接访
问数据库。
开放式SQL关键字
关键字用途
SELECT从数据库表读取数据(页3)
INSERT向数据库表添加行(页18)
UPDATE在数据库表中更换行(页20)
MODIFY添加或者更换行(页22)
DELETE从数据库表中删除行(页23)
OPENCURSOR,使用光标从数据库表中读取行(页25)
FETCH,
CLOSECURSOR
COMMITWORK,确认或者取消对数据库表的更换(页27)
ROLLBACKWORK
在ABAP/4程序中使用开放式SQL语句时,必须保证:
1)被定址的数据库系统必须是SAP支持的。
2)务必己经在ABAP/4词典中定义了被定址的数据库表。
下列系统字段在开放式SQL操作中起着重要的作用:
_SY-SUBRC
与使用其它ABAP/4语句一样,系统字段SY-SUBRC中的返回代码值表示在每个开放式
SQL操作之后该操作是否成功。假如操作是成功的,SY-SUBRC的值就等于0:假如操作
是失败的,SY-SUBRC的值就不等于0。
_SY-DBCNT
SY-DBCNT字段中的值说明受该操作影响的行数,或者己被处理的行数。
能够使用‘SQL跟踪’有用程序监视SQL或者ABAP/4功能的性能。为此,请选择“系统
->有用程序今SQL跟踪”。全面信息,参见文档ABAP/4工作台工具(页Error!Notavalid
link.).
从数据库表读取数据
要从数据库表读取数据,请使用SELECT语句。
语法
SELECT<result>FROM<source>[INTO<target>][WHERE<condition>]
[GROUPBY<fields>][ORDERBY<sort_order>].
该语句有几个基本子句。下表中列出了每一个子句。一
子句说明
SELECT<rcsult>SELECT子句定义选择的结果是单行还是一个表、选择的是什么
列、与是否将排除相同的行。
定义选择的结果83)
FROM<source>FROM子句指定即将从中选取数据的数据库表或者视图〈source"
指定将读取的数据库表(页7)
INTO<target>INTO子句确定即将读入选定数据的目标区(target〉。该子句也可
以放在FROM子句之前。假如没有指定INTO子句,系统将使用
表工作区。表工作区是由TANLES语句自动创建的表头行。
为选定数据指定目标区48)
WHERE<condition>WHERE子句指定将按照指定的条件读取哪些行来作为选择。
国一选择马上读取的行(页11)
GROUPBY<felds>GROUP-BY子句从几行构成的组中产生「作为结果的单行。一个
组是在〈fields〉中列出的列中有相同值的行的集合。
给行分组816)
ORDERBY<s)rt_order>ORDER-BY子句为选定的行定义顺序<sort_order>o
指定行的顺序质17)
关司--SELECT语,U及其子句性能的重要信息,参见关键字文档。
定S.选择的结果
SELECT子句定义是选择单行还是选择多行、是否去掉重复行与将选择什么列。
图中显示了可能fJ选择:
有关叙述SELECT子句的三个变式的主题,参见
选择多行中的所有数据
要从数据库表中读取所有列与多行,请按如下方式在循环中使用SELECT语句。
语法
SELECT[DISTINCT]*...........
ENDSELECT
务必用ENDSELECT语句结束该循环。
该循环依次读取所选行,并为每个读取的行执行循环中的ABAP/4语句。SELECT循环的结果是与被读取的
薮褊库表的格式完全相同的表。
DISTINCT选项将自动的去掉重复的行。
假如至少读取了一行,系统字段SY-SUBRC就返回0。假如没有读取,系统字段SY-SUBRC就返回4。系统
享段SY-DBCNT给读取的行计数。每执行一次SELECT语句,SY-DBCNT都加1。
TABLESSPFLI.
SELECT*FROMSPFLIWHERECITYFROMEQ'FRANKFURT,.
WRITE:/SPFLI-CARRID,SPFLI-CONNID,
SPFLI-CITYFROM,SPFLI-CITYTO.
ENDSELECT.
该SELECT循环从SPFLI-CITYFROM字段中包含“FRANKFURT”的SPFLI表中读取所有
的行(由WHERE子句指定)。读取的每一行的数据都由循环中的WRITE语句写入输出
列表中。
输出列表如下所示:
选择单行中的所有数据
要从数据库表中读取单个行的所有歹IJ,请按如下方式使用SELECT语句:
语法
SELECTSINGLE[FORUPDATE]*......WHERE<condition>.....
该语句的结果是一个单行。为了保证清晰地指定了一行,就务必在WHERE子句的条件〈condition〉中用
AND链接形成数据库表主码主码的所有字段。(关于WHERE子句的信息,参见选择马上读取的行gl1
1))«
假如系统没有找到具有指定关键字的行,系统字段SY-SUBRC将设置为4。假如系统找到了一个完全符合指
定条件的行,SY-SUBRC就返回0。
能够使用FORUPDATE选项锁定在数据库表中选定的行。程序将一直等到接收到该锁定。如果数据库检测
到或者怀疑有一个死锁定,将产生运行时间错误。
FORUPDATE选项不是将SAP锁定机制与ENQUEUE/DEQUEUE功能模块一起使用的替代
品。比如,显示一个新的屏幕时,所有用FORUPDATE锁定的行都将自动解锁。要保证在
显示新屏幕时锁定的行保留锁定状态,就务必使用SAP锁定机制。这是使锁定的行一直到
事务的结束都保留其锁定状态的唯一方法。详细信息,参见在ABAP/4程序的执行过程中
锁定数据库对象(页30)
TABLESSPFLI.
SELECTSINGLE*FROMSPFLIWHERECARRIDEQ'LH'
ANDCONNIDEQ,2407'.
WRITE:/SPFLI-CARRID,SPFLI-CONNID,
SPFLI-CITYFROM,SPFLI-CITYTO.
该SELECT语句只从SPFLI中读取CARRID字段中包含"LH”并且CONNID字段中包含
“2407”的行。
输出屏幕如下所示
选择并处理指定列中数据
要读取显式地包含规定的列的行,或者要得到关于数据库表特定列的摘要信息,请按如下方法一起使用
SELECT语句与列表:
语法
SELECT[SINGLE[FORUPDATE]][DISTINCT]<Si><s2>....
其中每个<Si>都具有下列形式之一
_<a1>
<ai>是数据库表的字段或者表单的总计表达式:
<aggregate>([DISTINCT]<a>)
关于总计表达式的说明,参见下列内容。
<a[>AS<bi>
一<bi>是结构化目标区的第i个组件的可选名称。可使用该可选名称将读取或者处理指定
行的结果写到目标区的组件<bi>中。为此,还务必使用INTO子句的CORRESPONDING
FIELDS选项(关于该选项的详细信息及示例,参见逐个组件地读取数据810))。
DISTINCT选项将自动地去掉重复行。
假如指定了SINGLE选项,选择的结果将由一单行的列<ai><a2>...构成。将如选择单行中的所有数据84)
中的描述选择该行。
可按如下方法书写SELECT语句以在运行时指定列:
语法
SELECT[SINGLE[FORUPDATE]][DISTINCT](<itab>).
假如内表vitab>包含列表<si><S2>....,该语句的操作与上述情况一样。因此,内表vitab>的行类型必须是
最大长度为72,类型为C的字段。如果内表为空,那么,该语句就按照指定的是星号(*)而不是vitab>
来进行操作。
总计表达式
使用总计表达式,可从数据库表的列<a>中摘录特征数据。有效的总计表达式是:
_MAX:返回列<a>的最大值
_MIN:返回列<a>的最小值
_AVG:返回列<a>的平均值
_SUM:返回列<a>的总计
_COUNT:按下列方式给值或者行计数:
-COUNT(DISTINCT<a>)返回列va>的不一致值的个数。
-COUNT(*)返回选定行的总数。
在括号与参数之间务必包含空格。算术操作符AVG与SUM只能对数字字段进行操作。
SELECT子句与INTO子句中的列表
假如在SELECT子句中有一个列表,就务必将INTO子句与SELECT语句一起使用。与有关主题中叙述的
•样,可以将工作区<wa>或者内表vitab>用作参数。注意,假如SELECT子句包含了一个列表,那么就根
据工作区<wa>或者内表vitab)的结构将选择的数据从左至右输出到目标区中o这是一个例外。通常情况
下,选择的数据是根据表工作区的结构从左至右输出到目标区中,而不考虑目标区的结构(关于INTO子
句的全面信息,参见为选定数据指定目标区B8))。
SELECT子句中有一个列表时,可在INTO子句中将列表<F1>,<F2>,...用作参数:
SELECT<ai><a2>..・・INTO(<F1>,<F2>,...).
SELECT子句与INTO子句中的列表务必包含相同数目的元素。假如可能,在传输数据过程中,应将值转
换成口标字段的数据类型(数据库表与ABAP/4数据类型之间可转换性的信息,参见有关INTO子句的关键
字文档)。假如在SELECT子句的列表中除总计表达式以外还有一个或者多个数据库字段,就务必在
GROUP-BY子句中列出所有数据库字段(全面信息,参见给行分组B16))。
TABLESSPFLI.
DATA:LIST(72)OCCURS1,
LINE(72).
LINE='CITYFROMCITYTO1.
APPENDLINETOLIST.
SELECTDISTINCT(LIST)
INTOCORRESPONDINGFIELDSOFSPFLIFROMSPFLI.
WRITE:/SPFLI-CITYFROM,SPFLI-CITYTO.
ENDSELECT.
在该示例中,将列CITYFROM与CITYTO写到内表LIST中,同时只从SPFL1中选择这些
列。选择结果将写到表工作区SPFLI中。关于INTO子句的CORRESPONDINGFIELDS选
项的信息,参见逐个组件地读取数据OR10)o由于使用了DISRINCT选项,因此将去
掉重复的行。
假设下列数据库表TEST由10行构成:
COL_1COL_2
13
21
35
47
52
63
71
89
94
103
要摘录并处理列数据,可使用下列程序:
TABLESTEST.
DATARESULTTYPEPDECIMALS2.
SELECT<agg>([DISTINCT]C0L_2)INTORESULTFROMTEST.
WRITERESULT.
下表显示了根据总计表达式<agg>与DISTINCT选项的不•致组合所得到的该程序的结
果。
使用的总计表达式包含的DISTINCT选项结果
MAXno9.00
MAXyes9.00
MINno1.00
MINyes1.00
AVGno3.80
AVGyes4.43
SUMno38.00
SUMyes31.0()
COUNTyes7.00
COUNT(*)一10.00
指定将读取的数据库表
要指定将用SELECT语句读取的数据库表或者视图,可使用FROM子句。
参见
在程序中指定数据库表名
要在程序中指定马上读取的数据库表或者视图,请按下列格式使用FROM子句:
语法
.....FROM<dbtab>[CLIENTSPECIFIED][BYPASSINGBUFFER]
[UPTO<n>ROWS]........
数据库表或者视图<dbtab>务必对ABAP/4词典有效,同时务必在ABAP/4程序中包含相应的TRABLES语
句。
要关闭自动集团处理(关于集团处理的全面信息,参见为数据库表处理指定集用(页28)),请使用
CLIENTSPECIFIED选项。
BYPASSINGBUFFER选项使得不用读取SAP表缓冲区就可直接读取数据库。
假如要保证操作的是数据库表的最新版本,该选项就是非常重要的。
在ABAP/4词典中定义•个表时,能够指定SAP务必将自己的本地缓冲区用于该表。该缓冲区被异步更新。
由于SELECT语句通常使用该缓冲区,因此没有必要使用数据库的最新版本。要保证使用的是最新版本,请
使用BYPASSINGBUFFER选项。
假如最多只需从数据库表<dbtab>中读取<n>行,请使用可选规范UPTO<n>ROWS,假如<n>=0,系统
将读取所有行,假如<n>小于0,将产生运行时间错误。
假如将UPTO<n>ROWS选项与ORDERBY子句组合起来,系统将首先给这些行排序,然后再处理前<n>
行(关于ORDERBY子句的全面信息,参见指定行的顺序通17))。
TABLESSPFLI.
SELECT*FROMSPFLI.
ENDSELECT.
在该示例中,将从数据库表SPFLI中读取所有行。
在运行时指定数据库表的名称
能够在运行时指定数据库表的名称«为此,请按如下格式使用FROM子句:
语法
.....FROM(<dbtabname>)[CLIENTSPECIFIED][BYPASSINGBUFFER]
[UPTO<n>ROWS]..INTO<target>....
该格式的FROM子句只能与INTO子句一起使用(参见为选定数据指定目标区⑦8)
字段<dbtabname>的内容确定了数据库表的名称。在该情况下,程序不必包含TABLES语句。选项CLIENT
SPECIFIED.BYPASSINGBUFFER与UPTO<n>ROWS同样是用于在程序中指定数据库表的名称(参见在
程序中指定数据库表名(页6))。
DATA:BEGINOFWA,
LINE(240),
ENDOFWA.
DATANAME(10).
NAME='SPFLI'.
SELECT*FROM(NAME)INTOWA.
WRITE:/WA-LINE.
ENDSELECT.
数据库表名称SPFLI被赋给字符字段NAME。SELECT语句将所有的行从SPFL1中读到目
标区WA中。在该示例中,WA与SPFLI的结构先不相同,每一行都将自动地转换成字符
字段(详细信息,参见为选定数据指定目标区便8)与ConvertibilityofFieldStrings(Ji
6-41))«
由于系统在ABAP/4词典中找不到数据库表SPFLI,因此不能用NAME=代替
NAME='SPFLI'。
输出列表的如下部分表明将数据写入文本字段错误地解释了一些列:
为选定数据指定目标区
要为选定数据指定目标区,请使用SELECT语句的INTO子句。只有在需要指定一个与表工作区不一致的目
标区时才需要使用该子句。表工作区通常由TABLES语句自动生成。假如需要使用数据库光标从数据库表
中读取行,也可在FRTCH语句中指定INTO子句(参见使用光标从数据库表中读取行(页25))。
INTO子句有三个要紧变式。其中两个用于将数据读到工作区中,而另一个用于将数据读到内表中。这些变
式将在下列主题中说明。
参见
第三个变式用于将数据读到列表中。它只能与SELECT子句中的列表一起使用,这些将在选择并处理指定
列中数据®4)中进行描述。假如现在是将INTO子句与SELECT子句的列表一起使用,那么将根据R
标区结构将选择的列从左至右输出。
在SELECT语句中没有列表(SELECT*)的情况下,所选数据将从左至右输出到目标区中。系统根据表工作
区的结构写入数据,而不考虑目标区的结构.要保证能访问数据库表单独的列,就只能使用与数据库表具
有相同结构的目标区。目标区的大小至少要能容下将读取的行。
ABAP/4词典中的数据类型与ABAP/4编程语言中的数据类型不一致。假如在SELECT子
句中指定一个列表,或者在INTO子句中使用CORRESPONDINGFIELDS选项,那么数据库
表的ABAP/4词典字段必须能够转换成ABAP/4编程语言的目标字段。有关可转换的数据
类型的列表,参见INTO子句的关键字文档。
将数据读到工作区中
能够将数据从数据库表读到与TABLES语句中定义的默认工作区不一致的工作区(通常是字段串)中。
为此,请按照如下格式在SELECT语句的INTO子句中指定工作区:
语法
SELECT…INTO<wa>...........
务必为工作区<wa>声明一个至少与将读取的行一样大的数据对象.
TABLESSPFLI.
DATAWALIKESPFLI.
SELECT*FROMSPFLIINTOWA.
WRITE:/WA-CITYFROM,WA-CITYTO.
ENDSELECT.
在该示例中,由于工作区WA的数据类型是由DATA语句中的LIKESPFLI定义的,所以
它有与数据库表SPFLI相同的结构。由于在SELECT循环中使用了INTO子句,因此将填
充工作区WA,而不是TABLES语句中所指定的标准工作区SPFLLSPFLI的所有字段,
即SPFLI-CITYFROM与SPFLI-CITYTO,都保留为空。
将数据读到内表中
能够在单个操作中将数据库表中行选择的结果集写入内表中。
为此,请按照如下格式在SELECT语句的INTO子句中指定内表:
语法
SELECT....INTOTABLE<itab>.
在该情况下,SELECT并不启动循环,同时不同意使用ENDSELECT语句。
假如内表<itab>不是空的,那么,SELECT语句将用读取的数据覆盖其中的内容。
TABLESSPFLI.
DATAITABLIKESPFLIOCCURS10WITHHEADERLINE.
SELECT*FROMSPFLIINTOTABLEITAB
WHERECARRID='LH'.
LOOPATITAB.
WRITE:/ITAB-CONNID,ITAB-CARRID.
ENDLOOP.
在该示例中,数据库农SPFLI(在该数据库表中CARRID字段包含“LH”)的所有行都将
读到内表ITAB中,并在那里进一步处理。
将内表指定为选定行的目标区时,能够在包中处理这些行或者将这些行附加到内表中,而不覆盖表中的内
容。这些选项的描述如下。
在包中处理这些行
假如需要将所选行按己预定义大小的包的形式读到内表中,请按如下格式使用INTO子句的PACKAGESIZE
选项:
语法
*TNTQTABLEPACKAGESTZE<n>
该语句打开二不扃环。务必使用ENDSELECT语句结束该循环;美宇读取的每个包含<n>行的包,系统都
将执行一次循环。假如<n>小于或者等于零,将出现运行时间错误。
在SELECT循环外,无法确定内表中的内容。因此假如希望进•步处理所选行,就务必在
循环中编写相应的ABAP/4语句。
TABLESSPFLI.
DATAITABLIKESPFLIOCCURS5WITHHEADERLINE.
SELECT*FROMSPFLIINTOTABLEITABPACKAGESIZE5
WHERECARRID='LH'.
LOOPATITAB.
WRITE:/ITAB-CARRID,ITAB-CONNID.
ENDLOOP.
SKIP1.
ENDSELECT.
在该示例中,数据库表SPFLI(在该数据库表中CARRID字段包含“LH”)的所有行都将
按大小为5行的包读到内表ITAB中。在SELECT循环内,又有一个循环将这些包写入输
出列表。输出列表如下所示:
将行附加到内表中
为了避免覆盖内表中的内容,可将所选行附加到此表中。为此,请按如下格式使用APPENDING子句,而
不是INTO子句:
语法
SELECT....APPENDINGTABLE<itab>....
与上面描述的INTO子句的唯一区别是它是将行附加到内表<itab>中,而不是其内容。也能够在该语句中
使用PACKAGESIZE选项。
逐个组件地读取数据
要一个组件接一个组件地将数据读到目标区中,请使用INTO子句的CORRESPONDINGFIELDS选项。语法
如下所示:
语法
关于将数据读宣工作区中:
SELECT.・・INTOCORRESPONDINGFIELDSOF<wa>.......
关于将数据读到内表中:
SELECT…INTOCORRESPONDINGFIELDSOFTABLE<itab>.......
关于将数据附加到内表中:
SELECT…APPENDINGCORRESPONDINGFIELDSOFTABLE<itab>.......
这些语句不会将所选行的所有字段放进目标区中。系统只将列的内容(关于该列,目标区中具有同名组件)
传送到目标区的对应组件中。假如可能,在传送过程中,可将值转换成目标字段的数据类型(关于数据库
表与ABAP/4数据类型之间的可转换性的信息,参见INTO子句的关键字文档)。
TABLESSPFLI.
DATA:BEGINOFWA,
NUMBERTYPEIVALUE1,
CITYFROMLIKESPFLI-CITYFROM,
CITYTOLIKESPFLI-CITYTO,
ENDOFWA.
SELECT*FROMSPFLIINTOCORRESPONDINGFIELDSOFWA.
WRITE:/WA-NUMBER,WA-CITYFROM,WA-CITYTO.
ENDSELECT.
输出如下所示:
在该示例中,系统只将数据库表SPFLI中选定行的列CITYFROM与CITYTO传送到WA
中。WA中的组件NUMBER保持不变。
TABLESSBOOK.
DATA:BEGINOFLUGGAGE,
AVERAGETYPEPDECIMALS2,
SUMTYPEPDECIMALS2,
ENDOFLUGGAGE.
SELECTAVG(LUGGWEIGHT)ASAVERAGE
SUM(LUGGWEIGHT)ASSUM
INTOCORRESPONDINGFIELDSOFLUGGAGEFROMSBOOK.
WRITE:/*1Average:1,LUGGAGE-AVERAGE,/'Sum:1,LUGGAGE-SUM.
该示例为数据库表SBOOK中的所有行计算了字段LUGGWEIGHT的平均值与总与。总计
表达式AVG与SUM的结果用选择性的名称写入结构LUGGAGE的组件AVERAGE与
SUM中。关于总计表达式与可选名称的全面信息,参见选择并处理指定列中数据(页
4)。
选择马上读取的行
假如只希望访问数据库表中的符合某些条件的行,请使用SELECT语句中的WHERE子句。
参见
该主题中说明的符合开放式SQL的WHERE子句不仅用在SELECT语句中,还用在
UPDATE>MODIFY与DELETE语句中。
在程序中为行选择指定条件
要在程序中为行选择指定条件,请按如下格式使用WHERE子句:
语法
WHERE<condition>
基本WHERE条件
有六个基本条件可用于限制行选择«描述如下:
1.<f><operator><g>
<f>是不带作为前缀的表名称的数据库字段名(数据库表的列),<g>是任意字段或者字母。字段名称与操作
符务必用空格隔开。
关于〈operator〉,可使用卜.列字符或者字符串:__________________
<operator>含义
EQ等于
=等于
NE不等于
<>不等于
><不等于
LT小于
<小于
LE小于或者等于
<=小于或者等于
GT大于
>大于
GE大于或者等于
>=大于或者等于
.......WHERECARRID='UA'.
选定字段CARRID的值为“UA”的所有行。
WHERENIIMRR1R
谑比季蕨NUM中的数字大于能者等于15的所有行。
.......WHERECITYFROMNE'FRANKFURT'.
选定字段CITYFROM中的字符串不等于“FRANKFURT”的所有行。
2.<f>[NOT]BETWEEN<gi>AND<g2>
数据库字段vf>的值务必(不能)处于字段或者字母vg>与vg2>的值之间才符合该条件。
.......WHERENUMBETWEEN15AND45.
选定字段NUM中的数字位于15与45之间的所有行。
.......WHERENUMNOTBETWEEN1AND99.
选定字段NUM中的数字不位于1与99之间的所有行。
.......WHERENAMENOTBETWEEN'A1AND'Hf.
选定字段NAME中的字符串的字母顺序不位于“A”与"H”之间的所有行。
3.<f>[NOT]LIKE<g>[ESCAPE<h>]
该条件只能用于字符类型字段。
要符合该条件,数据库字段<f>中的值务必(不能)符合<g>的模式。在指定<g>时,可使用下列两个通
配符:
_(下划线)表示单个字符
%(百分号)表示任意字符串,包含空字符串
比如,ABC_EFG%能与字符串ABCxEFGxyz与ABCxEFG匹配,但不能与ABCEFGxyz匹配。
....WHERECITYLIKE'%town%,.
选定所有包含“town”的城市名。
....WHERENAMENOTLIKE'n%'.
仅选定第二个字母不为“n”的名称。
假如在比较中要用到两个通配符,可使用ESCAPE选项。ESCAPE<h>指定一个忽略符号<h>«如果通配符
前面有<h>,那么通配符与忽略符号本身都失去了它在模式<g>中的常用功能。
....WHEREFUNCNAMELIKE'EDIT#%'ESCAPE'#1.
选定所有以“EDIT」开始的功能名称。
在LIKE条件中使用通配符一与%也符合SQL标准。但是,ABAP/4比较操作符CP与
NP将识别不一致的通配符(+与*)(关于通配符的详细信息,参见比较字符串与数字串
(页7-6)).
4.<f>
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论