ABAP中Literals的用法(untyped literal vs. typed literal)
1. 什么是Literals ?
Literals的字面意思即“文字”。其实,Literals就是在ABAP代码中直接指定的一个字符串,但注意哦,这个字符串并不意味着其类型一定是string哦。
要弄清这个概念,就要清楚ABAP对于Literals 的定义和处理方式。
ABAP中,有两种类型的literal:
- Numeric Literal: 数字文字
- Character Literal: 字符文字
DATA lt_sflight TYPE TABLE OF sflight.SELECT * FROM sflight INTO TABLE @lt_sflightWHERE connid = 0017 " Numeric LiteralAND fldate = '20220101' " Character LiteralAND currency = 'CNY'. " Character Literal
对于Literal,我们可以使用符号&对Literal进行拼接。
WRITE: 'Hello' & ' ABAP' & ' 7.55'.
我们通过以上的例子,可以看到,Literal其实就是程序里直接指定了一个常量,使用时,并不需要指定类型,ABAP编译器会根据Literal的值,进行自动的转换。
2. Literals的转换规则
2.1 数字文字 Numeric Literals
数字文字由0到9的数字组成,它可以直接在前面加上一个加号(+)或减号(-)。
- 当数字在【-2147483648 ~ 2147483647】范围之间时,编译器会给定其类型为 i。
- 当超过上述范围时,编译器会给定其类型为 p。
- 没有INT8的数字文字,如果需要可以通过CONV INT8()进行转换。
- 数字文字不包含小数
2.2 字符文字 Character Literals
字符文字可以是文本字段 text field或文本字符串 text string。
-
对于字符类型c的文本字段,其用单引号声明,最大长度为255;
-
对于字符串类型string的文本字段,其用反引号声明。
WRITE: / 'This is John''s bike' . " 单引号声明, 有要输出的单引号时,要转义单引号WRITE: / `This is John's bike`. " 反引号声明
对于字符文字的拼接,可以使用&拼接符,但要注意c类型的文字是不能与string类型的文字进行混合拼接的。
WRITE: / 'Hello' & ' ABAP' & ' 7.55'. " ok WRITE: / `Hello` & ` ABAP` & ` 7.55`. " okWRITE: / 'Hello' & ' ABAP' & ` 7.55`. " wrong
对于字符文字的声明和拼接,要注意:
- 使用文字操作符 & 组合的字符文字,最大长度是 255,因为ABAP代码编辑器的最大长度为255,字符文字声明时,是不能换行的。
- 对于长于255的字符文字,只能在运行时连接,例如使用连接操作符 && 。
下面展示了将4种不同的操作符拼接成一个字符串string,
DATA text TYPE string VALUE `Hello`. text = text && ` ` && 'world' && |!|. " 双竖线是string template的用法
2.3 String Template 字符串模板
字符串模板是通过两个竖线 | … | 来生成一个没有长度限制的字符串的方法。
- 拼接两个字符串模板生成的字符串时,可以通过 & 或 && , 两者的效果一致。
辨析几种不同的拼接:
方式1: 受255长度限制的拼接
`...` & `...`
'...' & '...' 方式2: 不受255长度限制的拼接
|...| & |...| 等同于 |...| && |...| 等同于 `...` && `...`
使用字符串模板最大的好处就是,可以在其内部,直接引用变量,所有在双竖线范围内的字符都会被认定为文字,包括空格;对于变量,可以用小括号进行引用:
Data result type string.
result = |Hello { sy-uname }!|.
2.4 字符文字的潜在问题
通过以上介绍,可以看到,字符文字在使用时,其实并没有直接指定类型,而是通过编译器自动识别类型,这就导致了,在程序运行过程中,会存在潜在的类型转换。
再回到最开始的例子:
SELECT * FROM sflight INTO TABLE @lt_sflightWHERE connid = 0017 " Numeric Literal --> 将 i类型 自动转换为 NUMC 类型AND fldate = '20220101' " Character Literal --> 将 c类型 自动转换为 DATS 类型AND currency = 'CNY'. " Character Literal --> 将 c类型 自动转换为 CUKY 类型
这就意味着,可能会出现潜在的转换问题。
3. ABAP 7.55及以上版本的typed literal
针对这一问题,在ABAP 7.55以及以上版本,ABAP支持了在SQL语句中,对literal 类型的显示指定。
这样我们在SQL中就可以写成下面形式,进而在编译时就发现代码中,可能存在的类型转换问题,避免程序在运行时才发现类型转换的问题。
SELECT * FROM sflight INTO TABLE @lt_sflightWHERE connid = numc`0017` AND fldate = dats`20220101` AND currency = cuky`CNY` .
同样的概念也适用于CDS View,更多的信息可以查看这篇SAP官方博客。
4. 小结
本文总结了ABAP编程中,对于literal的常见处理方式,辨析了c类型与string类型的literal,包括如何声明literal?如何拼接两个literal?并介绍了如何在ABAP 7.55以上使用指定类型的Literal。
本博客专注于技术分享,干货满满,持续更新。 欢迎关注❤️、点赞👍、转发📣!
相关文章:

ABAP中Literals的用法(untyped literal vs. typed literal)
1. 什么是Literals ? Literals的字面意思即“文字”。其实,Literals就是在ABAP代码中直接指定的一个字符串,但注意哦,这个字符串并不意味着其类型一定是string哦。 要弄清这个概念,就要清楚ABAP对于Literals 的定义和处理方式。…...

tensorflow1.14.0安装教程
1首先电脑安装好Anaconda3(Anaconda介绍、安装及使用教程 - 知乎 (zhihu.com),) 蟒蛇 |全球最受欢迎的数据科学平台 (anaconda.com) 2打开Anaconda Prompt(本人更新win11后,主菜单不再显示,那么我们可以打…...

C++赋值运算符重载
赋值运算符重载 目录赋值运算符重载示例1:示例2:示例3:示例4:很巧妙的是,在编写这篇文章时(2023年2月27日),再加100天就是6月7日,恰好是今年高考的百日誓师! …...

网络性能总不好?专家帮你来“看看”— CANN 6.0 黑科技 | 网络调优专家AOE,性能效率双提升
随着深度学习模型复杂度和数据集规模的增大,计算效率的提升成为不可忽视的问题。然而,算法网络的多样性、输入数据的不确定性以及硬件之间的差异性,使得网络调优耗费巨大成本,即使是经验丰富的专家,也需要耗费数天的时…...

Qss自定义属性
QSS自定义属性 更多精彩内容👉个人内容分类汇总 👈👉QSS样式学习 👈文章目录QSS自定义属性[toc]前言一、实现效果二、使用方式1.QSS设置Q_PROPERTY属性样式2.QSS设置动态属性样式3.qproperty-<属性名称>语法14.qproperty-&…...

连接金蝶云星空,数据交互轻松搞定!丨三叠云
金蝶云星空 路径 拓展 >> 插件 功能简介 新增插件「金蝶云星空」。 用户可通过配置「金蝶云星空」插件,就可以实时获取「金蝶云星空」的数据,同时支持回填数据至金蝶系统内。 地图视图 路径 表单 >> 表单设计 功能简介 新增「地图视…...
JSX是什么,React为什么使用JSX,babel怎么转译JSX的
JSX是什么,React为什么使用JSX,babel怎么转译JSX的 在前端的框架中有两种“描述UI”的方案,一种是JSX语法,一种是模板语言。 其中React就是选择的JSX,Vue就是选择的模板语言。 JSX其实就是一个语法糖,在…...

从工地转行软件测试,拿下13k+年终奖是种什么体验?
最近,一则名为《我:毕业五年,存款5000。她:中传硕士,火锅店保洁》的视频走红网络,两位名校毕业生看似高开低走的就业经历,引起了很多人的共鸣。她们所传达的并不是所谓的躺平、摆烂,而是希望更多…...

前端面试题 —— 计算机网络(二)
目录 一、POST和PUT请求的区别 二、GET方法URL长度限制的原因 三、页面有多张图片,HTTP是怎样的加载表现? 四、HTTP2的头部压缩算法是怎样的? 五、说一下HTTP 3.0 六、HTTP协议的性能怎么样? 七、数字证书是什么?…...

山东大学机器学习期末2022
接力:山东大学机器学习期末2021 本来是不想写的,因为不想回忆起考试时啥也不会的伤痛,没想到最后给分老师海底捞,心情好了一些,还是一块写完 备考建议:多看ppt,多看ppt,多看ppt 山东…...

FEBC2022|打造VR内容生态闭环 佳创视讯持续加码轻量化内容建设
2月24日,由陀螺科技主办的未来商业生态链接大会作为 2023 癸卯兔年开年率先召开的行业重要影响力盛会在深圳成功召开。今年大会云集了科技、软件、游戏、XR等元宇宙领域的世界500强、上市公司及行业独角兽企业,围绕游戏、元宇宙、XR、数字营销等多项热门…...

Redis常见的数据类型命令
文章目录Redis 常见的数据类型及命令一、常见的NoSQL二、Redis 简介三、key 键的一些操作命令四、Redis的五种基本数据结构1、String(字符串)介绍常用命令1.1 set/get1.2 append1.3 strlen1.4 setex1.5 mset/mget1.6 setrange/getrange1.7 setnx1.8 incr…...

Python3+Selenium3自动化测试-(准备)
最近在学习selenium自动化测试相关的内容,所以将实际准备情况做一记录, # 系统:win10(64位) # 浏览器:Chrome(67.0)、Firefox(61.0)、IE # python版本:3.6.5 # Selenium:3.13.0Selenium简介 Selenium是一…...

VUE的安装和创建
安装node.js 进入node官网进行下载,然后一直下一步。 测试是否安装成功: 命令提示窗下执行:npm -v 若出现版本号,则安装成功。 安装npm源: npm config set registry http://registry.npm.taobao.org 查看:…...

ETL工具(kettle) 与 ETL产品(BeeloadBeeDI) 差之毫厘,谬以千里
E T L——是英文Extract-Transform-Load的缩写,用来描述将数据从来源端经过抽取(extract)、转换(transform)、加载(load)至目的端的过程。工具——原指工作时所需用的器具,后引申为达…...

轻松入门H3C无线AC上线AP【入门篇】
我们知道华三的最新模拟器支持了无线AC的配置,今天就浅浅的出个无线AC的教程,你上也会的那种。今天我们模拟的是二层环境下,笔者准备了2个AP,以此展示AP上线到AC的教程,并且用手机测试WiFi连接正常,且客户端…...

尚医通(二十五)就医提醒和预约统计
目录一、就医提醒1、搭建定时任务模块二、后台管理系统-预约统计功能1、开发每天预约数据接口2、封装远程调用接口3、搭建统计分析模块4、整合统计功能前端一、就医提醒 我们通过定时任务,每天8点执行,提醒就诊 1、搭建定时任务模块 (1&…...

网页js版音频数字信号处理:H5录音+特定频率信号的特征分析和识别提取
文章目录一、网页中的音频数据源二、FFT:时域转频域三、信号的特征分析四、信号的识别提取附录音频数字信号处理 Audio DSP (Digital Signal Processing) 是一个复杂又专业的话题,本文介绍的是如何从音频中实时分析和识别出特定频率信号的一种方法&#…...
uniapp结合腾讯云及时通信IM的聊天记录本地存储方案
uniapp结合腾讯云及时通信IM的聊天记录本地存储方案 UniApp 是一个跨平台的应用开发框架,可以使用 Vue.js 开发多端应用(如H5、小程序、App等)。在 UniApp 中,可以使用 uni-app 提供的文件系统 API 完成本地文件存储的操作。 1.…...

PyQGIS开发 -- 基础学习笔记
1、自主学习QGIS开发虽然QGIS本身功能强大,但还是架不住我们要编写新的功能、新的业务流程、新的算法。前文中我们提到,扩展QGIS有2种方法,一是用Python、C来写QGIS的插件;另一种就是基于QGIS的C API开发独立应用程序。然而后者资…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...

边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...
基于服务器使用 apt 安装、配置 Nginx
🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

对WWDC 2025 Keynote 内容的预测
借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...
C#学习第29天:表达式树(Expression Trees)
目录 什么是表达式树? 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持: 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...

(一)单例模式
一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...