「ABAP」一文带你入门OPEN SQL中的SELECT查询(附超详细案例解析)

news2024/11/26 18:18:19

在这里插入图片描述

💂作者简介: THUNDER王,一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学会计学专业大二本科在读,同时任汉硕云(广东)科技有限公司ABAP开发顾问。在学习工作中,我通常使用偏后端的开发语言ABAP,SQL进行任务的完成,对SAP企业管理系统,SAP ABAP开发和数据库具有较深入的研究。


💅文章概要: 各位小伙伴们大家好呀!今天继续SAP ABAP系列文章的讲解,本节带来的内容是OPEN SQL中SELECT语句的介绍,希望大家喜欢!


🤟每日一言: 永远年轻,永远热泪盈眶!

目录

  • 前言
  • SELECT语句介绍
  • SELECT语句变式
    •   SELECT SINGLE
      •    案例演示
    •   SELECT SEVERAL LINE
      •    案例演示
  • SELECT并输出打印
    •   SELECT……ENDSELECT
    •   SELECT(LOOP……ENDLOOP)
  • SELECT……AS
  • 动态SELECT语句
  • DISTINCT
  • FOR UPDATE
  • 写在最后的话


前言

在这里插入图片描述

  各位小伙伴们大家好呀!今天继续SAP ABAP系列文章的讲解,本节带来的内容是OPEN SQL中SELECT语句的介绍,希望大家喜欢!


SELECT语句介绍

在这里插入图片描述

  在ABAP中,SELECT语句用于从数据库表中检索数据,它与传统的SQL语句有相似之处,也有独特于ABAP的特性,下面是OPEN SQL中标准的代码语法样例:

SELECT <fields>
  FROM <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 SINGLESELECT SEVERAL LINE

  SELECT SINGLE

  SELECT SINGLE语句用于从数据库中检索单个行,并将其存储在内部表中。如果检索到多行数据,则只返回第一行数据

  以下是SELECT SINGLE语句的语法:

SELECT SINGLE <fields>
  FROM <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, price
  FROM sflight
  WHERE connid = '0820'
  INTO 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 <fields>
  FROM <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, price
  FROM sflight
  WHERE carrid = 'LH'
  INTO 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.

  SELECT(LOOP……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 ID'
  INTO TABLE GT_SFLIGHT
  FROM SFLIGHT
  WHERE 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_result>
        INTO TABLE :gt_result
        USING :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, salary
  FROM zemployee
  WHERE id = '123'
  INTO (lv_name, lv_salary)
  FOR UPDATE.

* Update the employee's 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}{评论,你的意见是我进步的财富!} 评论,你的意见是我进步的财富!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/384525.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

阿里云服务器价格,阿里云轻量应用服务器最新价格表

阿里云服务器从地域上来区分可分为ECS云服务器和轻量应用服务器&#xff0c;从活动内容来区分又可分为秒杀云服务器和新用户特惠云服务器&#xff0c;下面是截止目前&#xff0c;阿里云服务器最新的秒杀及新用户特惠购买价格&#xff0c;以表格形式形式展示出来以供参考。 阿里…

​ICLR 2023 | 图数据分布外检测:从能量模型出发

©PaperWeekly 原创 作者 | 吴齐天单位 | 上海交通大学博士生研究方向 | 机器学习与图深度学习继续探索 Graph OOD 的相关问题&#xff0c;与以往工作不同的是&#xff0c;这篇工作避开了复杂的数学推导和琐碎的数据生成过程&#xff0c;直接从简单有效的判别模型入手研究…

【Spring】掌握 Spring Validation 数据校验

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ Spring Validation 数据校验一、什么是 Spring…

RAN-in-the-Cloud:为 5G RAN 提供云经济性

RAN-in-the-Cloud&#xff1a;为 5G RAN 提供云经济性 5G 部署在全球范围内一直在加速。 许多电信运营商已经推出了5G服务并正在快速扩张。 除了电信运营商之外&#xff0c;企业也对使用 5G 建立私有网络产生了浓厚的兴趣&#xff0c;这些私有网络利用了更高的带宽、更低的延迟…

【编程基础之Python】8、Python复合数据类型

【编程基础之Python】8、Python复合数据类型Python复合数据类型列表&#xff08;List&#xff09;创建列表访问元素内置方法列表操作元组&#xff08;Tuple&#xff09;创建元组访问元素集合&#xff08;Set&#xff09;创建集合基本操作其他操作字典&#xff08;Dictionary&am…

4.ffmpeg命令转码规则、过滤器介绍、手动流map选项

在上章我们学习了ffmpeg命令行帮助以及选项查找 本章我们来深入学习ffmpeg命令转码规则、过滤器介绍、手动流map选项 参考链接: 1.ffmpeg命令行转码流程 ffmpeg命令行转码流程如下图所示: 对应中文则是: 步骤如下所示: ffmpeg调用libavformat库(包含解复用器)来读取输入文件…

Linux -- 查看进程 PS 命令 详解

我们上篇介绍了&#xff0c; Linux 中的进程等概念&#xff0c;那么&#xff0c;在Linux 中如何查看进程呢 &#xff1f;&#xff1f;我们常用到的有两个命令&#xff0c; PS 和 top 两个命令&#xff0c;今天先来介绍下 PS 命令~&#xff01;PS 命令 &#xff1a;作用 &#x…

C语言拔高知识——指针的进阶(万字大文超详细)

在之前的文章中&#xff0c;我已经讲解过了初阶指针的内容&#xff0c;今天就来讲一讲指针的进阶&#xff01; 上篇指针地址&#xff1a;保姆式指针讲解&#xff0c;超详细&#xff0c;适合初学者_指针详解_陈大大陈的博客-CSDN博客 目录 1. 字符指针 2. 指针数组 3. 数组指…

3年测试经验的人来面试,简历都没写明白,一开口就要给20K的offer?

​我最近阅读了大约15份简历&#xff0c;他们都在申请我的团队的测试工程师职位。但是没有一份表达清楚了他是如何进行测试的。 下面我摘录了一些 信息&#xff1a; 几乎所有的应聘者都罗列了成串儿的他们熟悉的“技术”&#xff08;包括但不限于….Net&#xff0c; Unix&#…

c++基础/类和对象

c基础 2.1名字空间 namespace 防止命名冲突 说明&#xff1a;名字空间可以在全局作用域或其他作用域&#xff08;另一个名字空间&#xff09;内部定义&#xff0c;但不能在函数或类的内部定义。 使用&#xff1a; #include<iostream> using namespace std; //std中包…

【C/C++ 数据结构】-八大排序之 冒泡排序快速排序

作者&#xff1a;学Java的冬瓜 博客主页&#xff1a;☀冬瓜的主页&#x1f319; 专栏&#xff1a;【C/C数据结构与算法】 分享&#xff1a;那我便像你一样&#xff0c;永远躲在水面之下&#xff0c;面具之后&#xff01; ——《画江湖之不良人》 主要内容&#xff1a;八大排序选…

前端构建工具大盘点:gulp、webpack、vite、rollup、esbuild、snowpack、babel、parcel、swc、tsc

文章目录背景分类转译器打包器对比gulp VS webpackBundle vs Bundleless&#xff08;代表就是webpack VS vite&#xff09;其他比较个人理解总结官网背景 做前端也有好多年了&#xff0c;从最早的 jQuery 时代到现在的三大框架&#xff0c;这过程中用到了很多构建工具&#xf…

婴幼儿常见八大疾病及护理方法

在1岁之前&#xff0c;婴儿的体质还没有完全发育&#xff0c;很容易生病&#xff0c;大多数婴儿在1岁之后都会更好。今天&#xff0c;新的稀有婴儿育儿专家组织了一些婴儿最容易患的疾病和护理方法。1、新生儿黄疸宝宝出生后&#xff0c;你可能会注意到他的皮肤发黄。别担心&am…

Netty学习(三):Netty线程模型和代码示例

〇、前言网络编程的基本线程模型&#xff0c;详见&#xff1a;Netty学习&#xff08;二&#xff09;&#xff1a;线程模型一、工作原理简图Netty主要基于主从 Reactors 多线程模型&#xff08;如下图&#xff09; 做了一定的改进&#xff0c;其中主从Reactor 多线程模型有多个R…

11_MySQL数据处理(增删改)

1. 插入数据1.1 实际问题解决方式&#xff1a;使用 INSERT 语句向表中插入数据。1.2 方式1&#xff1a;使用VALUES使用这种语法一次只能向表中插入一条数据。情况1&#xff1a;为表的所有字段按默认顺序插入数据INSERT INTO 表名 VALUES (value1,value2,....);值列表中需要为表…

Windows安装Liberica JAVA8

在浏览器打开下载&#xff1a;Liberica JAVA。 点击链接"下载MSI"相对应的Microsoft Windows版本。 下载后完成后&#xff0c;验证的文件&#xff0c;通过比较其大小对你的驱动器和下载的页。 一个更加先进的方法来验证检验和在PowerShell&#xff1a; (Get-FileHas…

软件测试之测试环境--XAMPP

1. 测试环境 Linux下的环境搭建 LNMP: LinuxNginxMysqlphp项目 Windows下的环境搭建 WAMP: WindowsapacheMysqlphp项目 2. Xampp安装及使用 XAMPP包括Apache、MySQL、PHP、PERL&#xff0c;直接解压缩&#xff0c;没有复杂的安装过程&#xff0c;强烈推荐初学者使用。 到目前…

【C/C++基础知识点】输出n位斐波那契数列

目录 前言什么是斐波那契数列兔子的故事小知识点收尾前言 在软件行业已经有快十年,技术虽然一般般,但是足够应付额解决编程入门的相关问题! 都说十年磨一剑,积累到一定经验,是时候发挥自己的价值,给予入门的同行些许的帮助! 为什么要写收费专栏,其实原因很简单,时间就…

使用VNC远程连接Ubuntu - 内网穿透实现公网远程办公

写在前面&#xff1a;博主是一只经过实战开发历练后投身培训事业的“小山猪”&#xff0c;昵称取自动画片《狮子王》中的“彭彭”&#xff0c;总是以乐观、积极的心态对待周边的事物。本人的技术路线从Java全栈工程师一路奔向大数据开发、数据挖掘领域&#xff0c;如今终有小成…

PLSQL创建新用户并导入导出.dmp文件

一、登录管理员账号 用户名密码登录身份说明systemmanagerSYSDBA 或 NORMAL不能以 SYSOPER 登录&#xff0c;可作为默认的系统管理员syschange_on_installSYSDBA 或 SYSOPER不能以 NORMAL 登录&#xff0c;可作为默认的系统管理员scotttigerNORMAL普通用户aqadmaqadmSYSDBA 或…