【SAP Abap】X-DOC:SAP ABAP 语法更新之Open SQL
SAP ABAP 语法更新之Open SQL
- 1、前言
- 2、演示
1、前言
自从 SAP 推出 SAP ON HANA,与之相随的 AS ABAP NW 7.40 版本以后,ABAP 语法也有了较多的更新,本篇对 Open Sql的语法更新部分做一个DEMO演示。
NW 7.40 以前 OpenSQL 的限制:
① 没有固定值或计算列;
② 没有Case表达式;
③ 没有 right outer join;
④ 没有 Union;
⑤ 没有子查询
NW 7.40 开始 OpenSQL 支持的新特性:
① CASE;
② COALESCE;
③ 算术表达式:+,-,*,/;
④ CAST类型转换;
⑤ 算术函数:DIV、MOD、ABS、FLOOR、CEIL、ROUND;
⑥ 聚合函数:SUM,COUNT,AVG,MAX,MIN;
⑦ 字符串连接符 &&;
⑧ right outer join;
⑨ union and union all
存在的限制:
① 无法使用 SAP HANA 内置函数,如DAYS_BETWEEN;
② 无法使用 SAP HANA 数据库视图和存储过程
2、演示
*&---------------------------------------------------------------------*
*& Report Y_XLEVON_OPEN_SQL
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT y_xlevon_open_sql.TYPES: BEGIN OF ty_sflight,carrid TYPE sflight-carrid,connid TYPE sflight-connid,fldate TYPE sflight-fldate,seatsmax TYPE sflight-seatsmax,seatsocc TYPE sflight-seatsocc,status TYPE char10,END OF ty_sflight.PARAMETERS:p_carrid TYPE sflight-carrid,p_cust TYPE scustom-name.* (1)CASE表达式
* Old syntax for before AS ABAP 7.4 SP05
DATA: gt_data TYPE STANDARD TABLE OF ty_sflight.
FIELD-SYMBOLS: <fs_sflight> TYPE ty_sflight.SELECTcarridconnidfldateseatsmaxseatsocc
FROM sflight
INTO TABLE gt_data
WHERE carrid = p_carrid.LOOP AT gt_data ASSIGNING <fs_sflight>.IF <fs_sflight>-seatsocc GT 300.<fs_sflight>-status = 'High OCC'.ELSE.<fs_sflight>-status = 'Low OCC'.ENDIF.
ENDLOOP.* AS ABAP 7.4 SP05
SELECTcarrid,connid,fldate,seatsmax,seatsocc,CASE WHEN seatsocc GT 300 THEN 'High OCC'ELSE 'Low OCC'END AS status
*into table @DATA(gt_data2) " syntax OK
FROM sflight
*into table @DATA(gt_data2) " syntax OK
WHERE carrid = @p_carrid
INTO TABLE @DATA(gt_data2).* New Syntax 7.5+
SELECT FROM sflightFIELDS carrid,connid,fldate,seatsmax,seatsocc,CASE WHEN seatsocc GT 300 THEN 'High OCC'ELSE 'Low OCC'END AS status
*into table @DATA(gt_data3). " syntax error
WHERE carrid = @p_carrid
INTO TABLE @DATA(gt_data3). " 必须放在最后* (2)字面&算术表达式
DATA: lv_rebate TYPE p DECIMALS 2 VALUE '0.10'.
SELECT'hello' && 'XLevon' AS char, " 字符串拼接100 AS i_num, " 整型@sy-langu AS sys_lan, " 系统语言@lv_rebate AS p_num, " 定点小鼠price,( price * @lv_rebate ) AS rebate, " 折扣round( ( price * @lv_rebate ), 1 ) AS round_col," 折扣保留一位小数ceil( ( price * @lv_rebate ) ) AS ceil_col,floor( ( price * @lv_rebate ) ) AS floor_col
FROM sflight
WHERE carrid = @p_carrid
INTO TABLE @DATA(gt_data_expression).* (3)聚合函数
SELECTcarrid,connid,COUNT( DISTINCT ( fldate ) ) AS distinct_fldate,SUM( seatsmax ) AS sum_seatsmax,CAST( AVG( seatsocc ) AS INT4 ) AS avg_seatsocc
FROM sflight
WHERE carrid = @p_carrid
GROUP BY carrid, connid
INTO TABLE @DATA(gt_data_aggregate).* (4)右外连接
SELECTscarr~carrid,scarr~carrname,spfli~connid,spfli~cityfrom,spfli~cityto
FROM scarr
RIGHT OUTER JOIN spfli ON spfli~carrid = scarr~carrid
WHERE coalesce( scarr~carrid, 'NO CARR' ) <> 'NO CARR'
ORDER BY scarr~carrid, spfli~connid
INTO TABLE @DATA(gt_data_COALESCE)UP TO 10 ROWS.* (5)UNION & sub query
SELECT FROM sbookFIELDS 1 AS type, carrid, connid, fldate, bookid,CAST( loccuram AS FLTP ) / CAST( 2 AS FLTP ) AS div_field,loccurkey
WHERE customid IN ( SELECT id FROM scustom WHERE name = 'Martin' )
UNION ALL
SELECT FROM sbookFIELDS 2 AS type, carrid, connid, fldate, bookid,CAST( loccuram AS FLTP ) / CAST( 2 AS FLTP ) AS div_field,loccurkey
WHERE customid IN ( SELECT id FROM scustom WHERE name = @p_cust )
ORDER BY type, carrid, connid, fldate, bookid
INTO TABLE @DATA(gt_data_union).* (6)应用:判断数据记录是否存在
DATA: lv_msg TYPE string.
SELECT SINGLE @abap_trueFROM scustomINTO @DATA(lv_exists)WHERE name = @p_cust.
IF lv_exists EQ abap_true.CONCATENATE 'Customer' p_cust 'Exists' INTO lv_msg SEPARATED BY space.
* lv_msg = 'Customer ' && p_cust && ' Exists'. " 前两个单词间空格丢失
ELSE.lv_msg = 'Customer ' && | { p_cust } doesn't Exists|.
ENDIF.cl_demo_output=>write( gt_data ).
cl_demo_output=>write( gt_data2 ).
cl_demo_output=>write( gt_data3 ).
cl_demo_output=>write( gt_data_expression ).
cl_demo_output=>write( gt_data_aggregate ).
cl_demo_output=>write( gt_data_COALESCE ).
cl_demo_output=>write( gt_data_union ).
cl_demo_output=>write( lv_msg ).
cl_demo_output=>display( ).
原创文章,转载请注明来源-X档案
相关文章:
【SAP Abap】X-DOC:SAP ABAP 语法更新之Open SQL
SAP ABAP 语法更新之Open SQL1、前言2、演示1、前言 自从 SAP 推出 SAP ON HANA,与之相随的 AS ABAP NW 7.40 版本以后,ABAP 语法也有了较多的更新,本篇对 Open Sql的语法更新部分做一个DEMO演示。 NW 7.40 以前 OpenSQL 的限制:…...
leetcode 困难 —— 数组中的逆序对(分治法)
题目: 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。 题解: ① 我最开始想的蠢方法(会超时,可跳过ÿ…...
02.24:图片的风格转换
Github网址:https://github.com/lengstrom/fast-style-transfer 在anaconda prompt中切换环境命令:activate 环境名 列出所有环境名:conda info --envs 安装环境:conda create -n 环境名 pythonx.x.x 删除某环境:co…...
[SSD综述 1.3] SSD及固态存储技术半个世纪发展史
在我们今天看来,SSD已不再是个新鲜事物。这多亏了存储行业的前辈们却摸爬滚打了将近半个世纪,才有了SSD的繁荣, 可惜很多前辈都没有机会看到。所有重大的技术革新都是这样,需要长期的技术积累,一代一代的工程师们默默的…...
PAT 1023 组个最小数(分数20)题目有bug
目录 题目描述: 题目讲解: 框架构建: 代码部分: 一个bug: 题目描述: 给定数字 0-9 各若干个。你可以以任意顺序排列这些数字,但必须全部使用。目标是使得最后得到的数尽可能小(…...
QML 中的 5 大布局
作者: 一去、二三里 个人微信号: iwaleon 微信公众号: 高效程序员 在 QML 中,可以通过多种方式对元素进行布局 - 手动定位、坐标绑定定位、锚定位(anchors)、定位器和布局管理器。 说到 anchors,可能很多人都不太了解,它是 QML 中一个非常重要的概念,主要提供了一种相…...
使用Python进行数据分析——线性回归分析
大家好,线性回归是确定两种或两种以上变量之间互相依赖的定量关系的一种统计分析方法。根据自变量的个数,可以将线性回归分为一元线性回归和多元线性回归分析。一元线性回归:就是只包含一个自变量,且该自变量与因变量之间的关系是…...
我眼中的柔宇科技
关注、星标公众号,直达精彩内容来源:技术让梦想更伟大作者:李肖遥很早就知道了柔宇科技,当时是因为知道创始人刘自鸿,23岁清华本硕毕业,26岁获斯坦福大学电子工程博士学位,历时不超过3年&#x…...
Allegro如何快速把视图居中显示操作指导
Allegro如何快速把视图居中显示操作指导 用Allegro进行PCB设计的时候,为了方便检查和设计,时常需要将视图居中显示。一般地,会使用鼠标的中键进行放大和缩小,或者使用Zoom in和Zoom out来调整视图 Allegro还支持快速将视图居中 具体操作如下 点击View...
搜索相关功能
一、进入搜索页面 1.1 在pages下创建搜索页面为:search 1.2 在index.vue中点击进入搜素页面 onNavigationBarButtonTap(e){if(e.floatleft){uni.navigateTo({url:/pages/search/search})}},1.3 在pages.json中配置搜索页面头部 {"path" : "pages/…...
【从零开始制作 bt 下载器】一、了解 torrent 文件
【从零开始制作 bt 下载器】一、了解 torrent 文件写作背景了解 torrent 文件认识 bencodepython 解析 torrent 文件解密 torrent 文件结尾写作背景 最先开始是朋友向我诉说使用某雷下载结果显示因为版权无法下载,找其他的下载器有次数限制,于是来询问我…...
SystemVerilog-时序逻辑建模(5)多个时钟和时钟域交叉
数字硬件建模SystemVerilog-时序逻辑建模(5)多个时钟和时钟域交叉数字门级电路可分为两大类:组合逻辑和时序逻辑。锁存器是组合逻辑和时序逻辑的一个交叉点,在后面会作为单独的主题处理。组合逻辑描述了门级电路,其中逻…...
基本中型网络的仿真(RYU+Mininet的SDN架构)-以校园为例
目录 具体问题可以私聊博主 一、设计目标 1.1应用场景介绍 1.2应用场景设计要求 网络配置方式 网络技术要求 网络拓扑要求 互联互通 二、课程设计内容与原理 (1)预期网络拓扑结构和功能 (1)网络设备信息 …...
西北工业大学大学物理(II)期末试题选填解析2021-2022
2 金属薄片,就暗示了载流子是电子了。3 熟练掌握左右手即可。4 又是位移电流。6 感应电场。随时间变化着的磁场能在其周围空间激发一种电场,它能对处于其中的带电粒子施以力的作用,这就是涡旋电场,又叫感生电场。涡旋电场是非保守…...
【USB】windows热插拔通知接口分析
文章目录接口介绍概述过滤器介绍举例接收通知创建窗口参考文档接口介绍 概述 window提供了RegisterDeviceNotificationW方法,可以用来监听设备的热插拔事件。 HDEVNOTIFY RegisterDeviceNotificationW([in] HANDLE hRecipient,[in] LPVOID NotificationFilter,[in]…...
CMake入门
课程地址 文档地址 CMake可以用于所有的编程语言 HelloWorld 编写一个C文件: //hello.cpp #include <iostream>int main() {std::cout << "hello, world" <<std::endl;return 0; }手动编译: c hello.cpp书写CMakeList…...
python中一种编写config文件并及时更新的方法
contents0. Intro1. config.py2. 调用以及更新0. Intro 在pytorch或者其他深度学习框架中,有许多超参数需要调整,包括learning_rate,training_data_path等,因此编写一个config文件统一存放这些参数,方便调用/查看/修改…...
基于Windows下离线安装当前最新Arduino ESP32 SDK(2.0.7)固件开发包
基于Windows下离线安装当前最新Arduino ESP32 SDK(2.0.7)固件开发包✨写这篇的文章的初衷,是由于在前几天想通过离线一键安装包方式实现升级安装,结果发现解压后,可以找到开发板,但是无法上传代码ÿ…...
Android 9.0 app添加校验锁(输入密码才能进入app)
1.概述 在9.0的系统rom定制化开发中,在一些产品开发中,需要对app启动校验密码,输入密码后,才可以进app,所以说对这种 开发需求,首先找到启动app的关键点以后,在加入限制app启动的弹窗,输入密码,密码正确后在进入app,实现流程 就是这样,接下来看如何实现的 2.app添加校…...
注意力机制详解系列(二):通道注意力机制
👨💻作者简介: 大数据专业硕士在读,CSDN人工智能领域博客专家,阿里云专家博主,专注大数据与人工智能知识分享。 🎉专栏推荐: 目前在写CV方向专栏,更新不限于目标检测、…...
Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...
MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...
C++ 基础特性深度解析
目录 引言 一、命名空间(namespace) C 中的命名空间 与 C 语言的对比 二、缺省参数 C 中的缺省参数 与 C 语言的对比 三、引用(reference) C 中的引用 与 C 语言的对比 四、inline(内联函数…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...
leetcodeSQL解题:3564. 季节性销售分析
leetcodeSQL解题:3564. 季节性销售分析 题目: 表:sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...
