SAP中数据库的管理与维护.doc_第1页
SAP中数据库的管理与维护.doc_第2页
SAP中数据库的管理与维护.doc_第3页
SAP中数据库的管理与维护.doc_第4页
SAP中数据库的管理与维护.doc_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

sap中文学习网/blog/#m=0 程序人生的网易博客 希望大家能在这里找到们最新日志 SAPBW7.XImportantTable SAPBI自定义函数去除已0开 SAPBI读取层级节点的函数: SAPBWProcessChain:处理 SAPBW关于主数据处理链数 SAPBWDataSourceEnhancemSAP中数据库的管理与维护2009-06-30 11:40:47|分类:数据库|举报|字号订阅 SAP的长生存期数据储存在关系数据库中,其由行和列组成,列代表字段,行代表具体的数据。能够唯一确定一行数据饿的最小的列字段组合称为关系关键字。SAP系统本身提供一部分数据库表,有些表中已经填充数据(例:SAP基本系统数据和通过数据)使用程序预计按接口可以对关系数据库进行操作,这个接口就是标准数据查询语言(SQL)尽管称为标准SQL,但并非所有类型的数据库都支持同一套统一的标准化SQL语句集。SQL中可实现三种类型的数据库操作:数据定义(Data Definition):创建管理数据库对象(表、视图和索引等)不涉及具体数据。标准SQL中进行想过操作的语言集合称为DDL(Data Definition Language)数据操纵(Data Manipulation):数据查询和数据更新两大类DDL(Data Definition Language)和DML(Data Manipulation Language)数据控制(Data Control):用于实现用户权限,数据安全控制和数据操作一致性检查DCL(Data Control Language)SAP本身并不提供数据库系统,但支持多种类型的数据库,可通过ABAP的数据库接口操作这些底层数据库,该接口可将ABAP语言转换成特定的数据系统可识别的SQL语言。SAP提供ABAP语言中的Open SQL语句和特定数据库自身的SQLNative SQL语句。Open SQL是完全集成到ABAP语言中的标准SQL子集,优点是独立于不同数据库可由SAP系统自动转化为指定数据的特定SQL语句,具体平台无关性。Open SQL可实现DML功能,但DDL和DCL功能不能通过Open SQL来实现。Native SQL是ABAP程序中调用的特定数据库本身SQL语句,涵盖所有SQL功能。然而Native SQL需要两个前提:1)须明确系统正在使用的数据库类型;2)其次要了解该数据库所有使用SQL语句的具体语法形式,不具备良好的可移植性,与ABAP仅仅是松散的整合,而且在SAP系统中的应用很有限。因为Native SQL不是一个良好的解决方案,因此在SAP中常用数据字典来完成相关操作,还有SAP LUW 和SAP Locking等技术,对于权限的控制SAP Basis系统也有相关工具。数据库维护 ABAP中不包含任何数据定义语句,因而SAP系统中关系数据库的创建和维护主要通过数据字典(Data Dictonary)进行的,项目开发人员可在其中添加新的数据库表。除基本的表结构定义之外,数据库表的创建和维护过程还需进行其他各种设定,包括关键字(外码)、索引和技术设定等。一.表字段 在数据字典中,每创建一个数据库表后,都将同时生成一个同名的结构化数据类型,其中组件字段与实际物理表完全一致。在数据字典中可以查看数据库表字段,也可通过单击“内容”来显示表中的数据。数据表的行结构是个个字段作为组件构成的,其必须是数据字典中的数据元素、结构体。或者表等数据类型,创建是需对每个字段设定下列属性:字段名(FieldName):最长16位,字母开头,可包含字母、数字、下划线。关键字标签(KeyFlag):用于确定是否属于表关键字。字段类型(FieldType):每个字段都必须基于一个数据字典中的数据类型。字段长度(FieldLength):字段占的内存字节。小数位(DecimalPlaces):只对于某些数字类型需指定。说明文字(ShortText):说明该字段意义。此外,还可以为字段分配约束表和外部关键字及查询帮助。货币和度量值字段应参照CURR和QUAN类型生成。二.外部关键字 外部关键字(又称:外码,Foreign Key):用于定义数据表之间的关系,或实现对数据表字段的输入值检查,还可以用于将几个数据表链接位一个视图或者锁定对象。外部关键字用于实现数据分配时外码表和约束表之间的依赖关系,通过外部关键字段,一个外码表可唯一地确定约束表中的一行数据。当基于该字段在外码表中插入条目时,系统线检查相应外部关键字段的值组合是否已经在约束表中存在,只有已存在的值才能成功插入,否则该数据条目将被丢弃。注:在外码表(依赖表)只能插入与存在约束表(参照表)中存在的信息数据。三.技术设定 数据库需要进行技术设定(Technical Settings)以确定表在数据库存储区域中的创建形式及特征,数据库表的初始储存空间和可扩展的范围均取决于技术设定。1.Logical Storage Parameters相关的参数有Data calss(数据类型)和Size category(数量级别)。其中数据类型中有3种可选项:1)APPL0(Master Data):较少需要被修改的系统数据表,如:存储员工个人信息的表;2)APPL1(Transaction Data):需要经常被修改的数据表,如:产品库存量表;3)APPL2(Organizational Data):系统定制数据表,在系统安装后很少需要修改,如:国家代码;注:以分配对应的物理存储区域。2.数量级别定义表中可容纳数据的数量级别,参数从04中选择,根据企业规模和该表预计储存的数据条目而定。3.缓冲(Buffering):设定,定义该表是否具有缓冲机制,以及是否开启缓冲机制。4.缓冲类型(Buffering Type):若缓冲设定中选择了Buffering switch on项,则需要设置其缓冲类型。(Full、Single-record和Generice)缓冲机制的意义在于首次查询时将数据库中的数据放入应用服务器缓存区中,以提高后续查询效率,由系统数据库接口进行控制,最好不要对经常需要更新的数据库表设置该机制,对于经常读取但很少更新或60秒后才能被其他应用服务器程序修改的数据库表,开启缓冲机制,可上百倍地提高效率。5.Log data changes:用于设定表中的数据修改是否需要在系统日志中被记录。四.索引 索引可以看作是一个仅包括部分字段的数据库表拷贝,而且其中数据已经排序,可以用于数据库条目的快速访问,索引中包含指向实际表条目的指针。一个数据库表可包含一个主索引(Primary Index)和多个附属索引(Secondary Idex)主索引只包含表关键字和指向整个数据条目的指针,系统自动生成并维护其。有时依靠主关键字无法大幅度地提高搜索效率,也可以自行创建附属索引。提取数据ABAP程序通常使用Open SQL的数据查询语句SELECT将数据库条目选择到内存。一.SELECT语句:1)SELECT用于确定读取数据表中的哪些字段;2)FROM子句用于确定从哪些内表或者视图中读取数据;3)INTO用于确定将数据读取到程序内的哪些数据对象;4)WHERE用于限定选择条件;SELECT select_clause FROM from_clause INTO into_clause WHERE where_clause.在传统的ABAP语言中,如果使用TABLES语句声明表工作区,则可省略INTO子句(此方法已经被ABAP Object禁用)除以上4种外还有:GROUP BY:用于将一组数据条目压缩为一个单行作为选择最终结果;HAVING:用于限定ORDER BY子句子数据目组的选择条件;ORDER BY:用于限定行排序;SELECT整体语法结构:SELECT FROM INTO WHERE GROUP BY HAVING ORDER BY .二.选择单行数据: 如果只需要选取一个结果数据行,系统在数据库种找到第一个符合条件的数据条目时,就停止查询。单行选择需要在SELECT中使用SINGLE关键字,且INTO自居的结构必须为扁平结构:SELECT SINGLE INTO FROM .如果系统找到一个完全符合指定条件的行,SY-SUBRC返回0,否则返回4。1.选择全部字段一般不需要指明所有字段,而是在SELECT后用*符号,其中INTO语句种的目标对象最好与FROM种的类型相同。2.选择指定字段若指定多个数据对象,则需要将这些对象放在括号中,并用逗号隔开,而且其顺序需要与SELECT子句中指明的表字段顺序一致。如果指定一个扁平结构作为目标对象,且该结构体中的字段多需要选择的字段,则可以使用INTO子句的CORRESPONDING FIELDS选项,该选项只会将SELECT子句中指明字段的内容传送到目标工作区的同名组建中。三.选择多行数据 将符合条件的数据全部选取出,其语句结构也需要有相应变化,包括循环选择和选择至内表,两种情况。多行选择也可以使用“*”选择整行数据或指定要选择的字段列表。1.循环选择通过SELECT / ENDSELECT循环从数据库中读取多行。SELECT DISTINCT . ENDSELECT.注:使用DISTINCT自动去掉重复的行;SY-DBCNT(系统字段)为每次循环计数;对三塔tement block中语句块进行处理。2.选择至内表克刚变得一次性把数据选择到一个内表中去。SELECT .INTO|APPENDINGCORRESPONDING FIELDS OFTABLE itab.注:该情况下SELECT并不启动循环,因而不需要使用ENDSELECT语句;如果itab非空,则SELECT语句将用读取的数据覆盖其中的内容,使用APPENDING代替INTO将布覆盖内表,若结构不完全相同,也可使用CORRESPONDING FIELDS选项将同名区域相对应。3.指定选择包大小包的大小指的是一次选择到内表的行数,可使用INTO子句的PACKAGE SIZE选项。SELECT * . INTO TABLE itab PACKAGE SIZE n . ENDSELECT.注:由于指定了包的大小,该语句以循环的形式出现;如果n小于等于0,将出现运行是错误。四.指定查询条件:1.比较运算符:(=、=及相应关键字)WHERE . f g . /f为不带前缀数据表名称的字段名FROM中指定,g任意数据对象。2.范围限定运算符:WHERE . fNOTBETWEEN g1 AND g2 . /条目中f必须在g1与g2之间的值。3.字符比较运算符:WHERE fNOTLIKE g ESCAPE h . /数据条目中,字段f值必须符合g的模式。g中通配符“_”用于代替单个字符,“%”用于代替任意字符串(包含空串)。注:可使用ESCAPE选项指定一个忽略符号(h),如果通配符前有忽略符号,那么通配符和忽略符号本身都失去了其功能,而是还原为本义。4.检查列表值:WHERE . fNOT IN (g1,.,gn). /来价差数据库字段f中的值是否等于括号内列表中的一个值。e.g. SELECT . WHERE city IN(beijing,rome,london).5.检查空值:WHERE . f ISNOT NUll . /来判断数据库字段f中的值是否为空值。注:在ABAP中,特定的数据对象都具有初始值,这些初始值可能是一串0或空格等,但不等同于数据库中的NULL值,因而使用ABAP语句添加数据条目时,所有的数据字段都不可能是空值。但在ABAP数据词典里仍有可能存在控制字段,因为Native SQL可以进行空值设置。6.检查选择:选择表是一种复杂而强大的逻辑表达式组合形式,其本身是一个内表,检查选择表意味着数据库字段f需满足所有逻辑表达式的组合。WHERE . f NOT IN seltab .其中seltab是选择标准表,是具有特定格式的内表,可以通过SELECT-OPTIONS语句添加到程序和报表选择屏幕,并由报表用户填充它。查询条件也可在全部或者部分运行时动态指定,方法为在程序中将所有选择条件放置于一个内表中。SELECT . WHERE AND (itab) .内表itab金包含一个类型c组件且最大长度为72的字段。五.夺标结合查询 应用程序需要从相关联的多个数据库表读取数据进行评估,此时需要用某些结合条件(字段)把各个数据库表连接起来。1.SELECT语句嵌套:2.FOR ALL ENTRIES选项:Open SQL在WHERE子句中提供了FOR ALL ENTRIES附加项,选出符合已存在内表中所有满足条件的数据值:SELECT . FOR ALL ENTRIES IN itab WHERE .3.使用视图:可通过视图(view)将多个数据库表的选择结合在同一个SELECT居于中进行。4.结合查询(Join)Inner Jion基本思想是如果主数据表和结合表中存在共同的字段内容,根据其相同值提取SELECT . FROM table INNER JOIN jointable1AS aliasON, jointable2AS aliasON.table是主选择表;jointable是结合表;ON用于指定结合条件;注:不同逻辑条件之间只能通过AND连接,且每个条件中必须包含一个主选择表中的字段,可用“”指定其所属的数据库表作为前缀。LeftOuterJoin与InnerJoin的主要区别是前者中对于主选择表的数据,即使在结合数据表中条件字段只不存在,也将该数据行选出,结合表中不存在的字段保持空白。SELECT . FROM table LEFTOUTERJOIN dbtab AS alias ON .ON附加项中,只能使用“=”操作符。5.子查询使用EXISTS,IN或者逻辑运算符连接至WHERE子句中,但不能与结合选择附加项ON同时出现,子查询可进行嵌套。六.组合查询结果1.总计功能:特定字段:MAX最大值、MIN最小值、SUM求和、AVG平均值、COUNT行数。SELECT agg (DISTINCT s1)AS a1 agg (DISTINCT s1)AS a1 .agg:总计的表达式;s1:字段;a1:目标变量;DISTINCT排出相同的选择结果。2.分组总计:使用GROUP BY子句进行分组总计,注:分组总计只能应用在查询字段已经指定了的情况,因此只有指定单独的基本字段列表或者使用INTO CORRESPONDING FIELD附加项的SELECT语句才能进行分组选择。SELECT s1AS a1 s2AS a2 . agg(sm)AS am agg(sn)AS an. INTO (f1,f2,.fm,fn)|COORESPONDING FIELD OF itab. GROUP BY s1,s2 .3.指定分组条件:使用HAVING子句给分组选择的结果限定条件。注:只有使用GROUP BY时才可使用。SELECT s1AS a1 s2AS a2 . agg(sm)AS am agg(sn)AS an. INTO (f1,f2,.fm,fn)|COORESPONDING FIELD OF itab. GROUP BY s1,s2 . HAVING .用法与WHERE子句中规则一致。4.指定行的顺序:ORDER BY 子句指定行的顺序,排序标准是数据表住关键字或指定的字段。SELECT * FROM . ORDER BY PRIMARY KEY. /系统以升序次序给出SELECT * FROM . ORDER BY f1ASCENDING|DESCENDING f2ASCENDING|DESCENDING . /默认为升序,先按f1排,后按f2排七.其它格式说明1.使用标工作区: TABLES dbtab标工作区是接口工作区中的一种,使用TABLES语句声明,在ABAP objects中不能再使用该语句格式,在指定了标工作区之后,SELECT语句中可省略INTO子句。2.动态指定数据库表SELECT .FROM (dbtabname).通过在运行时为变量值指定数据库表名。注:dbtabname必须包含一个数据库表名字,且必须为大写形式,不能使用表工作区忽略INTO子句。e.g. dbtabname=SPFLI3.指定数据区域 不同应用被分为若干个商业区域,这些区域称为集团(Client)。每个集团都会被系统自动分配一个默认字段MANDT,注:一些系统通用表是集团无关的,可跨区域存储无MANDT字段。 若要操作特定集团,则需要使用CLENT SPECIFIED取消系统自动处理功能。SELECT|UPDATE . dbtab CLENT SPECIFIED .注:CLENT SPECIFIED紧跟在表名之后,并在WHERE对mandt的集团字段进行使用。4.设置缓冲机制 在数据字典Technical settings中进行不同类型缓冲设定。SELECT语句中的FROM子句的BYPASSING BUFFER附加项,可取消数据字典对该表的缓冲。DISTINCT附加项与结合选择、总计选择、IS NULL条件、子查询,以及GROUP BY和ORDER BY同时使用时,也将自动忽略缓冲设定。SELECT . FROM dbtab BYPASSING BUFFER .5.限定选择行数SELECT . FROM dbtab UP TO n ROWS .若n为正数,则系统最获选n行到程序中,若n为0,则选所有满足的行。注:与ORDER BY同时使用时先排序,再从排序结果中选n行。6.操作性能分析GET RUN TIME FIELD f.f为I类型,返回开始后的毫秒数。可得到当前系统已运行的时间,来分析SQL语句的操作性能。注:若需要对程序进行更为复杂、全面性能分析,可以使用系统工具Runtime Aralysis(SE30)。八.使用光标 在SELECT语句中,数据从数据库中以32KB的数据包传递至应用服务器中,并通过INTO子句传至ABAP中,Open SQL中提供了一套语句对数据的具体传输过程进行监测,这个监测通过操作数据库光标进行,使用光标几乎可以从任何SELECT语句的结果集中获得下一行,先用OPEN CURSOR语句将光标与相关的SELECT语句连接起来。OPEN CURSOR WITH HOLD c FOR SELECT . WHERE (conditions).其中:c为CURSOR类型,不能在SELECT SINGLE中使用光标。 打开光标后,就可使用FETCH语句从OPEN CURSOR的结果集中读下一行FETCH NEXT CURSOR c INTO .其中所选行都将读到INTO子句指定的目标区域。若FETCH没有读取任何行SY-SUBRC为4,否则返回4。必须使用CLOSE CURSOR c 来关闭光标数据库提交时,系统将自动关闭光标,若在OPEN CURSOR中使用WITH HOLD选项,则Native SQL数据库提交将不会关闭光标。更新数据 Open SQL中使用INSERT、UPDATE、MODIFY和DELETE语句进行数据的更新操作,其中当SY-DBCNT返回为0,则表示操作成功,此外还将返回实际操作的数据行数。需要指明的是Open SQL本身并不进行操作权限的检查,若需要进行设定,则要在系统中创建授权对象。一.INSERT语句Open SQL中的INSERT语句用于向数据库中插入新条目。1.插入单行数据:INSERT INTO dbtab VALUES wa.INSERT INTO dbtab FROM wa.wa为工作区,是与数据库具有相同结构的数据对象,一般直接基于数据库结构声明。该语句也可以将数据插入视图中,首先该视图所有字段必须来自同一个数据库表,而且在数据字典中的maintenance status属性必须设定为read and change注:如果相同表关键字的数据条目已经存在,则不能重新插入,只能对非关键字进行更改(UPDATE,MODIFY)2.插入多行数据INSERT dbtab FROM TABLES itab.其中itab是内表,包含希望插入的数据条目。注:内表应与数据库的行结构一致。所有条目成功插入,则SY-SUBRC返回0使用ACCEPTING DUPLICATE可避免该错误。INSERT dbtab FROM TABLE itab ACCEPTING DUPLICATE KEYS.ACCEPTING DUPLICATE的效果是:若出现关键字相同,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论