招聘做微信公众号网站维护,求职网站开发开题报告,企业邮箱格式范本,app开发工具排行#x1f482;作者简介#xff1a; THUNDER王#xff0c;一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学会计学专业大二本科在读#xff0c;同时任汉硕云#xff08;广东#xff09;科技有限公司ABAP开发顾问。在学习工作中#xff0c;我通常使用偏后… 作者简介 THUNDER王一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学会计学专业大二本科在读同时任汉硕云广东科技有限公司ABAP开发顾问。在学习工作中我通常使用偏后端的开发语言ABAPSQL进行任务的完成对SAP企业管理系统SAP ABAP开发和数据库具有较深入的研究。 文章概要 各位小伙伴们大家好呀今天继续SAP ABAP系列文章的讲解本节带来的内容是OPEN SQL中SELECT语句的介绍希望大家喜欢 每日一言 永远年轻永远热泪盈眶 目录前言SELECT语句介绍SELECT语句变式 SELECT SINGLE 案例演示 SELECT SEVERAL LINE 案例演示SELECT并输出打印 SELECT……ENDSELECT SELECTLOOP……ENDLOOPSELECT……AS动态SELECT语句DISTINCTFOR UPDATE写在最后的话前言 各位小伙伴们大家好呀今天继续SAP ABAP系列文章的讲解本节带来的内容是OPEN SQL中SELECT语句的介绍希望大家喜欢 SELECT语句介绍 在ABAP中SELECT语句用于从数据库表中检索数据它与传统的SQL语句有相似之处也有独特于ABAP的特性下面是OPEN SQL中标准的代码语法样例
SELECT fieldsFROM table[WHERE condition][ORDER BY fields [ASC|DESC]][GROUP BY fields [HAVING condition]][INTO internal table][FOR ALL ENTRIES IN internal table][UP TO n ROWS][HINT hint].参数介绍 fields需要检索的字段列表。 table需要从中检索数据的数据库表。 condition可选项用于过滤检索结果的条件。 internal table可选项表示检索结果将被存储在内部表中。 FOR ALL ENTRIES IN internal table可选项表示使用内部表中的值作为条件来检索数据。 n可选项表示返回的最大行数。 hint可选项用于优化数据库查询。 SELECT语句变式 在ABAP中SELECT语句不仅可以检索多行数据还可以检索单行数据。为了满足这两种不同的检索需求ABAP提供了两种SELECT语句的变体SELECT SINGLE和SELECT SEVERAL LINE。 SELECT SINGLE SELECT SINGLE语句用于从数据库中检索单个行并将其存储在内部表中。如果检索到多行数据则只返回第一行数据。 以下是SELECT SINGLE语句的语法
SELECT SINGLE fieldsFROM table[WHERE condition][ORDER BY fields [ASC|DESC]][INTO internal table][FOR UPDATE].PS所有参数同SELECT语句介绍一致 案例演示 在这个案例中首先声明一个sflight表的结构体类型ls_flight然后使用SELECT SINGLE语句检索连接ID为0820的航班的航空公司、连接ID、日期和价格并将数据存储在结构体ls_flight中。最后使用WRITE语句将检索到的航班数据输出到屏幕上。
DATA: ls_flight TYPE sflight.* Select a flight with connection ID 0820 and store the data in a structure
SELECT SINGLE carrid, connid, fldate, priceFROM sflightWHERE connid 0820INTO ls_flight.* Display the flight data
WRITE: / Flight, ls_flight-connid, on, ls_flight-fldate,with airline, ls_flight-carrid, costs, ls_flight-price, USD.SELECT SEVERAL LINE SELECT SEVERAL LINE语句用于从数据库中检索多个行并将其存储在内部表中。如果没有检索到数据则返回空内部表。 以下是SELECT SEVERAL LINE语句的语法
SELECT fieldsFROM table[WHERE condition][ORDER BY fields [ASC|DESC]][GROUP BY fields [HAVING condition]][INTO internal table][FOR ALL ENTRIES IN internal table][UP TO n ROWS][HINT hint]. PS所有参数同SELECT语句介绍一致 案例演示 在这个案例中首先声明一个内部表it_flight其类型为自定义类型ty_flight该类型包含航空公司、连接ID、日期和价格字段。然后使用SELECT SEVERAL LINE语句检索航空公司代码为LH的所有航班的航空公司、连接ID、日期和价格并将数据存储在内部表it_flight中。最后使用LOOP AT语句遍历内部表中的每个航班数据并使用WRITE语句将其输出到屏幕上。
TYPES: BEGIN OF ty_flight,carrid TYPE sflight-carrid,connid TYPE sflight-connid,fldate TYPE sflight-fldate,price TYPE sflight-price,END OF ty_flight.DATA: it_flight TYPE STANDARD TABLE OF ty_flight.* Select all flights with airline code LH and store the data in an internal table
SELECT carrid, connid, fldate, priceFROM sflightWHERE carrid LHINTO TABLE it_flight.* Display the flight data
WRITE: / Flights operated by airline LH:.
LOOP AT it_flight INTO DATA(ls_flight).WRITE: / ls_flight-connid, on, ls_flight-fldate, costs, ls_flight-price, USD.
ENDLOOP.SELECT并输出打印 下面介绍ABAP中两种SELECT并且输出打印的方式其中第一种是先将数据SELECT到结构体变量中然后输出打印第二种是先将数据SELECT到内部表中然后使用LOOP语句遍历内表最终输出打印到屏幕上。 SELECT……ENDSELECT
DATA:GT_SFLIGHT TYPE TABLE OF SFLIGHT.
DATA:GS_SFLIGHT TYPE SFLIGHT.SELECT * INTO GS_SFLIGHT FROM SFLIGHT WHERE CARRID AC.WRITE:/ GS_SFLIGHT-CARRID,GS_SFLIGHT-CONNID.
ENDSELECT.SELECTLOOP……ENDLOOP
DATA: GT_SFLIGHT TYPE TABLE OF SFLIGHT.
DATA: GS_SFLIGHT TYPE SFLIGHT.SELECT * INTO CORRESPONDING FIELDS OF TABLE GT_SFLIGHT FROM SFLIGHT WHERE CARRID AC.LOOP AT GT_SFLIGHT INTO GS_SFLIGHT.WRITE:/ GS_SFLIGHT-CARRID,GS_SFLIGHT-CONNID.
ENDLOOP.SELECT……AS 在ABAP中使用SELECT AS可以为查询结果的列定义别名。这对于使用SELECT语句构建动态SQL语句和生成报表非常有用。
SELECT columns AS alias...参数介绍 columns数据库表中字段。 alias字段别名。 下面给出一个详细的案例进行详解
DATA: GT_SFLIGHT TYPE TABLE OF SFLIGHT,GS_SFLIGHT TYPE SFLIGHT.SELECT CARRID AS Airline Code,CONNID AS Connection IDINTO TABLE GT_SFLIGHTFROM SFLIGHTWHERE CARRID LH.LOOP AT GT_SFLIGHT INTO GS_SFLIGHT.WRITE:/ GS_SFLIGHT-Airline Code, GS_SFLIGHT-Connection ID.
ENDLOOP.在这个例子中我们使用SELECT AS为CARRID和CONNID两个列定义了别名。这个别名可以在程序中被引用这样我们就可以避免使用SFLIGHT表中的实际列名。 在程序的输出中我们使用GS_SFLIGHT-Airline Code和GS_SFLIGHT-Connection ID来引用别名这样输出的结果中将显示别名。 动态SELECT语句 在ABAP中可以使用动态SELECT语句来构建在运行时构建SQL语句的能力。这对于需要根据用户输入或条件动态构建SQL语句的应用程序非常有用。 下面给出一个详细的案例进行详解
DATA: gt_result TYPE TABLE OF sflight,gs_result TYPE sflight,lv_carrid TYPE sflight-carrid.*获取用户输入的Airline Code
PARAMETERS p_carrid TYPE sflight-carrid.*构建动态SQL语句
CONCATENATE SELECT * FROM sflight WHERE carrid p_carrid INTO lv_sql.
CREATE DATA gt_result TYPE TABLE OF (sflight).
ASSIGN gt_result-* TO FIELD-SYMBOL(fs_result).
EXEC SQL PERFORMING fs_resultINTO TABLE :gt_resultUSING :lv_sql.*输出结果
LOOP AT gt_result INTO gs_result.WRITE:/ gs_result-carrid, gs_result-connid, gs_result-fldate, gs_result-price.
ENDLOOP.在这个示例中我们首先使用PARAMETERS语句定义了一个用户可以输入的参数p_carrid。然后我们将该参数与一个SELECT语句的一部分拼接起来构建了一个动态的SQL语句lv_sql。 接下来我们使用CREATE DATA语句动态创建了一个内部表gt_result然后使用ASSIGN语句将该内部表的指针赋值给一个FIELD-SYMBOL变量fs_result。 最后我们使用EXEC SQL语句执行了动态SQL语句并将结果存储在内部表gt_result中。在循环中我们遍历内部表并输出结果。 PS需要注意的是动态SELECT语句需要使用EXEC SQL语句来执行而不是ABAP的SELECT语句。此外我们还可以使用CONCATENATE语句和其他字符串操作函数来构建动态SQL语句。通过使用动态SELECT语句我们可以根据不同的条件构建不同的SQL语句并以此实现高度灵活的应用程序。 DISTINCT [DISTINCT]为OPEN SQL中SELECT语句的可选项若选择则自动删除所查询数据的重复项在某些场景中我们需要对查到的数据进行去重的操作这时候便需要加上DISTINCT可选项 下面给出一个详细的案例进行讲解
DATA:GT_SFLIGHT TYPE TABLE OF SFLIGHT.
DATA:GS_SFLIGHT TYPE SFLIGHT.
DATA:GS_LINE(72) TYPE C.GS_LINE CARRID CONNID.SELECT DISTINCT (GS_LINE) INTO CORRESPONDING FIELDS OF TABLE GT_SFLIGHT FROM SFLIGHT WHERE CARRID AC.LOOP AT GT_SFLIGHT INTO GS_SFLIGHT.WRITE:/ GS_SFLIGHT-CARRID,GS_SFLIGHT-CONNID.
ENDLOOP.在SFLIGHT数据库表中CARRID等于‘AC’的数据有两条使用了DISTINCT语句后查询出来的数据便只有一条了。 FOR UPDATE 在ABAP中SELECT SINGLE语句可以使用FOR UPDATE选项来锁定检索到的行以便在事务期间对它们进行更新或删除操作。当使用FOR UPDATE选项时会在数据库中为检索到的行设置锁防止其他用户同时修改相同的数据。 下面给出一个详细的案例进行详解
START-OF-SELECTION.DATA: lv_name TYPE zemployee-name,lv_salary TYPE zemployee-salary.* Select employee with ID 123 and lock the row for update
SELECT SINGLE name, salaryFROM zemployeeWHERE id 123INTO (lv_name, lv_salary)FOR UPDATE.* Update the employees salary
lv_salary lv_salary 1000.* Commit the changes
COMMIT WORK. 在这个示例中首先使用SELECT SINGLE语句检索ID为123的员工姓名和工资并将该行锁定以进行更新。然后将员工的工资增加1000并在事务结束时提交更改。由于该行被锁定其他用户无法同时更新相同的数据。 写在最后的话 本文花费大量时间介绍了OPEN SQL中SELECT语句的详细语法希望能帮助到各位小伙伴码文不易还望各位大佬们多多支持哦你们的支持是我最大的动力 ✨原创不易还希望各位大佬支持一下\textcolor{blue}{原创不易还希望各位大佬支持一下}原创不易还希望各位大佬支持一下 点赞你的认可是我创作的动力\textcolor{9c81c1}{点赞你的认可是我创作的动力}点赞你的认可是我创作的动力 ⭐️ 收藏你的青睐是我努力的方向\textcolor{ed7976}{收藏你的青睐是我努力的方向}收藏你的青睐是我努力的方向 ✏️ 评论你的意见是我进步的财富\textcolor{98c091}{评论你的意见是我进步的财富}评论你的意见是我进步的财富