首页 abap学习视频5(Open SQL)

abap学习视频5(Open SQL)

举报
开通vip

abap学习视频5(Open SQL)课程目标:1)了解Open SQL和Native SQL 2)使用Open SQL对数据表进行增删查改 3)Native SQL的简单示例 4)LUW(Logical Unit of Works ,作业逻辑单元) 一、 Open SQL 和Native SQL 在ABAP中,可以使用Open SQL 或者是Native SQL进行数据库的操作。 (1) 用Native SQL访问数据库允许使用特定数据库的命令。这需要关于语法的细节知识。使用了Native SQL命令的程序在被传输到不同的系统环境(不同的数据库...

abap学习视频5(Open SQL)
课程目标:1)了解Open SQL和Native SQL 2)使用Open SQL对数据表进行增删查改 3)Native SQL的简单示例 4)LUW(Logical Unit of Works ,作业逻辑单元) 一、 Open SQL 和Native SQL 在ABAP中,可以使用Open SQL 或者是Native SQL进行数据库的操作。 (1) 用Native SQL访问数据库允许使用特定数据库的命令。这需要关于语法的细节知识。使用了Native SQL命令的程序在被传输到不同的系统环境(不同的数据库系统)后会需要附加的编程,因为基于特定数据库的SQL命令语法通常需要调整。 (2) Open SQL命令是与数据库无关的,它们被数据库接口自动转化为相应的SQL语句,并被传输给数据库。一个用Open SQL操作的ABAP程序就是数据库无关的,可以在任何R/3系统中使用它而无需调整。 (3) 使用Open SQL的另一个好处是可以在应用程序上缓存SAP表,以便快速的读取,这也意味着减少了数据库加载。在分别对表做了设置后,数据会自动从缓冲区读出 (4) Open SQL命令集只包含数据操作语言(DML)的操作,不包含数据定义语言(DDL)的操作,是因为这些操作包含在ABAP字典中。 (5) 只有在必须用到某些Native SQL功能,而Open SQL没有提供时,才用Native SQL实现数据库访问。 二、 Open SQL 执行的返回值 和影响的 记录 混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载 数量 所有Open SQL命令都提供了关于数据库操作执行成功还是失败的返回信息。这个消息传输一个返回码给系统字段sy-subrc . sy-subrc 如果为0 意味着操作成功完成,所有其它值意味着发生了错误。另外,系统变量sy-dbcnt显示了刚才的数据库操作实际执行所影响的记录数量。 三、 Open SQL 权限检查 Open SQL命令不执行任何自动的权限检查,需要在程序中明确的执行这些权限检查。 四、 Client (1) Client即客户端、集团。在一个SAP中可以分为多个Client,不同的Client数据完全不同。实际上一个服务器的数据都是放在相同的表中的,它们通过MADNT这个字段来保存Client信息并进行区分,所建数据为该Client独享。MADNT为SAP Table保留字,一般情况下必填。 (2) SAP 系统是客户端系统。客户端概念是就业务而言彼此独立的若干个企业可以在一个系统中并行运行。就组织而言,客户端是系统中的独立单元。每个客户端都有自己的数据环境,因此也就有自己的主数据、交易数据和分配的用户主记录。  (3) 从法律和组织的角度来说,客户端是系统中的独立单元。决定是否设置客户端之前,应该考虑以下几点: A. 客户端之间不经常交换数据。 B. 如果有员工更改了客户端,就必须重新创建人员编号。  五、 Open SQL 访问Client相关的表 (1) 如果在Open SQL 命令中没有使用CLIENT SPECIFIED 附加关键字,在WHERE 子句中就不能指定Client,则只会访问当前运行的Client的相应数据。 (2) 如果想要处理所有其他Client的数据,必须在Open SQL 命令中指定附加关键字CLIENT SPECIFIED,并且在相应的WHERE 子句中指定Client。 (3) 注意,如果包含了附加关键字CLIENT SPECIFIED 的Open SQL 命令没有指定集团的话,就会访问所有Client。 六、 Open SQL—INSERT命令 6.1 插入单条数据 INSERT INTO  <数据表> VALUES  <结构> INSERT ITNO  <数据表>  [CLIENT SPECIFIED]  FROM  <结构> (1) 其中,<结构>必须与<数据表>结构相同;在命令被调用前把要插入的行放到结构中。 (2) 只有在指定了CLIENT    SPECIFIED 附加关键字的情况下,结构中的CLIENT字段才会被使用。如果没有附加关键字,则使用当前的CLIENT。 (3) 还可以用视图来插入行。然而,视图必须已经在ABAP 字典中创建,并且维护状态设置为“读和修改”,此外还只能包含来自表的字段。 (4) INSERT 命令有以下返回码 0:成功插入行。    4:由于已经存在相同主键的行,因此无法插入。 6.2 插入多条数据 INSERT <数据表> FROM TABLE <内表> [ACCEPTING DUPLICATE KEYS] (1) 其中,<内表> 必须跟<数据表>具有相同的行结构 (2) 与插入单条记录的时候一样,只有在指定了CLIENT SPECIFIED 附加关键字的情况下,<内表>中的Client字段才会被使用。如果没有这个附加关键字,则使用当前Clinet。 (3) 如果可以创建所有行,sy-subrc 就会设置为0;但是,即使只有一行不能被创建,也发生运行时错误这意味着整个插入操作都会被放弃(数据库回滚)。如果这时,想要把可以插入的行都真正插入数据库,就使用命令的附加关键字ACCEPTING DUPLICATE KEYS。如果发生了错误,这个附加关键字抑制运行时错误(包括数据库回滚),设置返回值(sy-subrc)为4,并且插入所有没有错误的记录。系统字段sy-dbcnt 包含了成功插入数据库的行数。 七、 Open SQL ---SELECT 例1:利用结构读取单条记录 data : wa type spfli. select single carrid connid cityfrom cityto into CORRESPONDING FIELDS OF wa from spfli where carrid = '117' and connid = '2222'. if sy-subrc = 0. write : / wa-carrid,wa-connid,wa-cityfrom,wa-cityto. else. write : / 'No Records!'. endif. 例2:重复行的处理 DATA: itab TYPE STANDARD TABLE OF spfli, wa LIKE LINE OF itab. DATA: line(72) TYPE c, list LIKE TABLE OF line(72). line = ' CITYFROM CITYTO '. APPEND line TO list. SELECT DISTINCT (list) INTO CORRESPONDING FIELDS OF TABLE itab FROM spfli. IF sy-subrc EQ 0. LOOP AT itab INTO wa. WRITE: / wa-cityfrom, wa-cityto, wa-carrid. ENDLOOP. ENDIF. 例3:AVG()---求平均值 SUM()---求总和 方式一: DATA:   average TYPE p DECIMALS 2, SUM     TYPE p DECIMALS 2. SELECT AVG( luggweight ) SUM( luggweight ) INTO (average, SUM) FROM sbook. WRITE: / 'Average:', average, / 'Sum    :', SUM. 方式二: DATA: BEGIN OF luggage, average TYPE p DECIMALS 2, sum     TYPE p DECIMALS 2, END OF luggage. SELECT AVG( luggweight ) AS average SUM( luggweight ) AS sum INTO CORRESPONDING FIELDS OF luggage FROM sbook. WRITE: / 'Average:', luggage-average, / 'Sum    :', luggage-sum. 例4:当where条件为动态的时候 将用户在选择屏幕上输入的值拼接成where条件,然后使用 select  … from <数据表> where (<内表>) data: cond(72) type C, itab like table OF cond. PARAMETERS: city1(10) type C, city2(10) type C. data wa type spfli-cityfrom. concatenate 'cityfrom = ''' city1 '''' into cond. append cond to itab. concatenate 'OR cityfrom = ''' city2 '''' into cond. append cond to itab. concatenate 'OR cityfrom = ''' 'BERLIN' '''' into cond. append cond to itab. write : / '拼接后的where条件为:'. LOOP AT itab into cond. write : /  cond. ENDLOOP. SELECT  cityfrom into  wa FROM  spfli WHERE (itab). write / wa. ENDSELECT. 八、 Open SQL---UPDATE命令 8.1 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 一:UPDATE <数据表> FROM (1) 必须跟被更新的数据表具有相同的结构 (2)同样,只有指定了 CLIENT SPECIFIED 附加关键字后,存在于 中的Client字段才会被使用,否则就使用当前Client。 8.2  方法二:UPDATE <数据表> SET <字段1> = <值1> <字段2> = <值2> …. <字段n> = <值n> WHERE  (1) 只有使用SET 附加关键字指定的字段会在数据库端被用指定的值覆盖。 (2) 可以在SET 附加关键字中指定数值字段的简单计算操作,例如:f = g,f = f + g,f = f - g。 8.3  方法三:UPDATE <数据表> FROM  TABLE  <内表> 九、 Open SQL---MODIFY命令 MODIFY [CLIENT SPECIFIED] FROM . MODIFY [CLIENT SPECIFIED] FROM TABLE . (1) MODIFY 命令是SAP 特有的,它覆盖了两个命令 UPDATE 和INSERT。如果在MODIFY 语句中指定的数据记录存在,这条记录就被更新;如果在MODIFY 语句中指定的数据记录不存在,这条记录就被插入。 (2) MODIFY 操作同样可以作用于视图,对视图的规定如前所述。视图必须已经在ABAP 字典中创建,并且维护状态为“允许读和写”,所有字段都必须在表中。 一十、 Open SQL---DELETE命令 DELETE <数据表> FROM <结构> DELETE  FROM <数据表>  [CLINET SPECIFIED] WHERE 一十一、 示例程序(测试Open SQL中INSET DELETE UPDATE SELECT命令) REPORT  ZABAPLEAN5_3. tables : spfli. data : it_tab like table of spfli. data : it_tab_wa like line of it_tab. PARAMETERS : t_carrid like spfli-carrid OBLIGATORY, t_connid like spfli-connid  OBLIGATORY, t_cifrom like spfli-cityfrom . write : / '屏幕上的数据为'. write : / 't_carrid=' , t_carrid, 't_connid=', t_connid . "根据用户在屏幕上的选择,修改结构it_tab_wa it_tab_wa-carrid = t_carrid. it_tab_wa-connid = t_connid. "将屏幕上的数据插入表spfli中. insert into spfli values it_tab_wa. if sy-subrc = 0. write : / '数据插入成功'. else. write : / '数据插入失败'. endif. "查询当前表的记录 select * from spfli into CORRESPONDING FIELDS OF TABLE it_tab. data : amount type i . amount =  lines( it_tab ). write : / '数据库中数据条数为:',amount. loop at it_tab into it_tab_wa. write : / it_tab_wa-carrid ,it_tab_wa-connid . endloop. "删除所有carrid 为'1111'的数 delete from spfli where carrid = '111'. "记住这个地方要重新查询数据表 select * from spfli into CORRESPONDING FIELDS OF TABLE it_tab. amount =  LINES( it_tab ). WRITE : / '删除所有carrid 为‘111’的记录之后,数据库中数据条数为:',amount. LOOP AT it_tab INTO it_tab_wa. WRITE : / it_tab_wa-carrid ,it_tab_wa-connid . ENDLOOP. "修改carrid = '117'的记录的cityto = '纽约', cityfrom = '旧金山' update spfli set cityto = '纽约' cityfrom = '旧金山' where carrid = '117'. SELECT * FROM spfli INTO CORRESPONDING FIELDS OF TABLE it_tab where carrid = '117'. amount =  LINES( it_tab ). WRITE : / 'carrid = 117的所有记录条数为:',amount. LOOP AT it_tab INTO it_tab_wa. WRITE : / it_tab_wa-carrid ,it_tab_wa-connid ,it_tab_wa-cityfrom,it_tab_wa-cityto. ENDLOOP. 一十二、 Native SQL EXEC SQL [PERFORMING
] SQL语句 ENDEXEC. PERFORMING ---是个子程序,用于接收和处理SQL语句的返回值 例如: data : begin of wa, carrid type c, connid type c, end of wa. DATA c1 TYPE spfli-carrid VALUE '117'. exec SQL performing output. select carrid,connid  into :wa from spfli  WHERE  carrid = :c1 endexec. FORM output . write : / wa-carrid,wa-connid. ENDFORM.                    " output 输出结果: 注意:通过以上程序,我们可以看出:在子程序output中,可以循环输出SQL语句所查询出得所有值,虽然子程序output中没有显式的循环读取。 一十三、 SAP LUW 与数据库LUW 数据库LUW,是底层数据库自身提供的保持数据一致性的机制,与SAP系统无关,对于ABAP程序来说,主要的问 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 在于如何确定数据库的LUW的触发时机。一个工作过程总是在下述情况下结束一个数据库LUW,并隐式进行数据库提交: A 当一个对话步骤(Dialog step)结束,即显示一个新屏幕给用户时。 B 当另一个工作过程继续程序的时候,这一般出现在RFC的调用和返回过程中。 相应的,下列情况将使数据库隐式地进行返回操作: A 当前ABAP程序出现运行错误 B 一个ABAP程序因类型A或X的消息而导致中止 SAP LUW:一个 SAP LUW可以包含多个对话步骤,即多个数据库LUW ,但一个Open SQL语句不能被分割为几个对话步骤,即通过SAP LUW可以将多个数据库LUW进行捆绑,并保存整体初始状态,不进行真正的数据库修改。当SAP LUW中的最后一个数据库LUW结束时,再进行整体修改,或整体取消操作。 SAP LUW提供两种具体数据库LUW捆绑机制: ● 在定义FUNCTION时将其定义为Update module,同时在调用时用如下方式:CALL FUNCTION ...IN UPDATE TASK.则该模块不是马上被执行,而是被放置于应用服务器中的一个特殊的更新工作过程(Update work process)中,因此可以将多个分布在不同对话过程中的类似模块捆扎在一起,当SAP LUW结束时,确保所有模块被同时成功执行或整体放弃,因此可通过该方式封装分布在不同对话过程中的所有数据库更新操作.一个SAP LUW显式提交方式:COMMIT WORT [AND WAIT].该语句结束SAP LUW并触发更新工作过程,该过程在同一个数据库LUW中进行更新操作,因而数据库LUW此时可以替代SAP开始进行一致性控制.这些进行更新工作的FUNCTION可以被设为同步(加AND WAIT)或异步模式.即是否要等到更新任务完成后才继续执行后续语句. ● PERFORM ... ON COMMIT [LEVEL n].效果与上面相同,此方法更高效,但此时子程序不能传递参数. LEVEL表示优先级,n取整数.n越小越先执行. ● ROLLBACK WORK.控制SAP LUW整体返回,在实现SAP LUW更新功能的FUNCTION或子程序内部不能使用此语句及COMMIT语句. TABLES SPFLI. DATA FLAG. SPFLI-CARRID = 'LH'. SPFLI-CONNID = '1245'. SPFLI-CITYFROM = ............ INSERT SPFLI. IF SY-SUBRC <> 0. FLAG = 'X'. ENDIF. SPFLI-CARRID = 'AA'. SPFLI-CONNID = '4574'. SPFLI-CITYFROM = ............ INSERT SPFLI. IF SY-SUBRC <> 0. FLAG = 'X'. ENDIF. ................ IF FLAG = 'X'. ROLLBACK WORK. ELSE. COMMIT WORK. ENDIF. 一十四、 SAP LUW (作业逻辑单元) (1) 一个LUW包含了R/3系统中逻辑上一体的修改,这些修改要么一起完整执行,要么完全不执行(“全部和全不”的概念) (2) 一般来说,一个业务事务不会被一个单独的SAP LUW处理。比如:从接受客户订单到出具发票,可以被分为多个独立的逻辑部分。每个部分对应一个 SAP LUW 。SAP LUW的定义依赖于整个过程和它的模型。 (3) 关于更多信息,参考ABAP 关键字文档关于事务处理(transaction processing)的部分。 (4) 数据库LUW包含了一系列修改,直到数据库状态变成“密封的”(数据库提交) (5) 在数据库LUW 中,通常可以放弃所有已经执行到该点的修改(数据库回滚),这样,数据库就会恢复到当前数据库LUW之前的状态。用这个数据库回滚功能在发生错误的时候恢复到以前的(数据一致的)数据库状态。 (6) 使用ABAP语句ROLLBACK WORK和COMMIT WORK,可以强制实现数据库回滚和数据库提交。还有一些情况会隐式的触发数据库提交: (7) 在数据库LUW中实现 SAP LUW A、 如果在SAP LUW处理中发生错误,应该可以返回一个在SAP LUW开始之前 就存在的一致的数据库状态。为了完成这个目标,SAP LUW必须在数据库LUW中处理 B、 由于SAP R/3的客户端/服务器架构,这并非一个没有价值的事,因为SAP R/3事务通常有多个屏幕来输入修改数据。任何时候有一个屏幕修改,系统就会自动触发一个隐式的数据库提交。然而,应该允许在一个事务中把用户的整个输入合成一个SAP LUW,并且写入到数据库中。 一十五、 R/3 系统的客户端/服务器架构 (1) SAP R/3 系统基于客户端/服务器系统的三层架构。三层分别是数据库服务器、应用服务器和表示层服务器。 (2) 这个架构,与分布式用户请求(用户分配)一起,形成了一个高效而低成本的多用户系统。 (3) 三层架构意味着大量使用廉价台式计算机(低性能)的用户,可以使用高性能(通常也是非常昂贵的)应用服务器上的一定数量的工作进程。应用服务器上的每个工作都分配了一个高性能数据库服务器的工作进程。 (4) 分配用户请求到工作进程,就意味着,在表示层服务器上的独立客户端在某段时间能分配到一个工作进程。同样的,这个工作进程又使用了数据库上另一个工作进程。在这个工作进程把用户的一个会话步骤的输入处理结束之后,这个用户以及程序上下文,都会被移除工作进程。这个工作进程就可以被其他用户使用。 (5) 三层架构比“胖” 客户端架构(表示层和应用层都运行在一个服务器上)更具有伸缩性。使用三层架构,数据库用户的数量可以远远少于实际使用系统的用户数量。这也会给数据库的表现带来积极的影响。 一十六、 隐式的数据库提交 (1) 在每个单独屏幕显示前,当前的工作进程会从应用服务器上释放。这时,触发了对应的数据库工作进程,并且自动初始化一个隐式的数据库提交。 (2) 在每次用户会话前释放工作进程有以下好处:A、不锁定任何应用服务器或数据库服务器上的工作进程。这减少了数据库资源的负荷。B、只有当用户完成屏幕处理,将要请求内部程序处理时,用户才会跟程序上下文一起“回滚”。 这意味着用户要返回一个工作进程做处理 (3) 隐式的数据库提交通常在程序必须等待时初始化,例如下列情形: A. 当系统显示SAP屏幕时 B. 当系统发送会话消息时 C. 当发生同步或者异步RFC(Remote     Function Call)调用时 D. 在 CALL TRANSACTION 或者SUBMIT 语句时 (4) 出于上面提到的原因,隐式的数据库提交或者属于SAP LUW 的修改可能不会放在不同的会话步骤(会话步骤即在一个屏幕后的程序处理)中。原因是这些步骤可能不在一个数据库LUW 中。 一十七、 2 十五、标准教程:BC414
本文档为【abap学习视频5(Open SQL)】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_882336
暂无简介~
格式:doc
大小:38KB
软件:Word
页数:16
分类:互联网
上传时间:2019-05-12
浏览量:38