ABAP中Literals的用法(untyped literal vs. typed literal)

news2024/9/27 23:28:52

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_sflight
                           WHERE connid = 0017        " Numeric Literal
                             AND fldate = '20220101'  " Character Literal
                             AND 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`. " ok

WRITE: / '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_sflight
                           WHERE 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_sflight
                           WHERE 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。

本博客专注于技术分享,干货满满,持续更新。 欢迎关注❤️、点赞👍、转发📣!

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

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

相关文章

Win10+vs2019配置与运行RenderMatch+用contextcapture进行重建

Win10vs2019配置与运行RenderMatch用contextcapture进行重建 继上一篇博客,ground image 和aerial image影像匹配结果将会被保存为match.bin二进制文件里 再次运行时,只需要把这个bin文件load进来就可以了,不需要再次进行匹配,修…

推荐五款在手机上写代码的APP(附下载地址)

🌟1.C4droid一款Android设备上的C/C程序IDE🌟2.AIDE一个直接在 Android 设备上开发 Android 应用的集成开发环境基于原版深度定制、适配本土化的操作习惯,一键快速添加常用的代码,大幅提高开发效率。实时的语言翻译,帮…

CUDA的卸载

大家好,下面将进行CUDA的卸载,卸载情况描述如下: > 安装在电脑Windows10系统 (1)安装在电脑Windows10系统,打开控制面板-程序-程序和功能,可以看到自己已经安装过的CUDA,如下所示: (2)依次选中需要卸载的CUDA包,鼠标右键点击卸载即可,一般需要保留3个已经安装…

idea集成Alibaba Cloud Toolkit插件

idea集成Alibaba Cloud Toolkit插件 ​ 使用该插件主要是简化打包、上传、启动服务的相关操作。 ​ 很早之前的方式是使用开发工具(eclipse,idea),使用maven命令完成项目打包(这里指jar),然后通过shell工…

SSL证书的五大优势

SSL 重要吗?我需要 SSL 吗?开车时需要系好安全带吗?看日食时需要戴防护眼镜吗?就前三个问题而言,答案是一个很大的“是”!如果您在 2021 年拥有网站或博客,则需要 SSL。就这么简单。SSL 证书不再…

BigBird:大鸟模型中文生成式长文本摘要实践

1、介绍 BigBird 是一种基于稀疏注意力的Transformer,可将基于Transformer的模型(例如 BERT)扩展到更长的序列。 论文:https://arxiv.org/abs/2007.14062 代码:https://github.com/google-research/bigbird BigBir…

Day902.Memory存储引擎 -MySQL实战

Memory存储引擎 Hi,我是阿昌,今天学习记录的是关于Memory存储引擎的内容。 两个 group by 语句都用了 order by null,为什么使用内存临时表得到的语句结果里,0 这个值在最后一行; 而使用磁盘临时表得到的结果里&…

ARM的工作模式和37个寄存器

一、ARM的工作模式 ARM一共有7种工作模式 模式含义User非特权模式,大部分任务执行在这种模式FIQ当一个高优先级(fast) 中断产生时将会进入这种模式IRQ当一个低优先级(normal) 中断产生时将会进入这种模式Supervisor当复位或软中断指令执行时…

巨头混战,抢着“兜底”自动驾驶安全

诚然,中国汽车行业的发展绝对不会拘泥于电动化,必定会在电动化的基础上,迎接下半场的快速智能化。 2021年6月,长城汽车线控底盘全球首次发布。 彼时,长城汽车技术副总裁宋东先宣布,整合了线控转向、线控制…

基于海鸥算法改进的DELM分类-附代码

海鸥算法改进的深度极限学习机DELM的分类 文章目录海鸥算法改进的深度极限学习机DELM的分类1.ELM原理2.深度极限学习机(DELM)原理3.海鸥算法4.海鸥算法改进DELM5.实验结果6.参考文献7.Matlab代码1.ELM原理 ELM基础原理请参考:https://blog.c…

【数据结构与算法】单链表的增删查改(附源码)

这么可爱的猫猫不值得点个赞吗😽😻 目录 一.链表的概念和结构 二.单链表的逻辑结构和物理结构 1.逻辑结构 2.物理结构 三.结构体的定义 四.增加 1.尾插 SListpushback 2.头插 SListpushfront 五.删除 1.尾删 SListpopback 2.头删 SListpo…

浅谈音视频开发,如何更好的去学习?

Android音视频跟普通的应用层开发相比,的确更花费精力。期间为了学习音视频的录制,编码,处理也看过大大小小的几十个项目。总体感觉就是知识比较零散,对刚入门的朋友比较不友好。所以才萌生了整理一个Android音视频学习路线的想法…

Qss自定义属性

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

如何在报表生成工具 Stimulsoft 中自定义报告查看器?

Stimulsoft Reports 是一款报告编写器&#xff0c;主要用于在桌面和Web上从头开始创建任何复杂的报告。可以在大多数平台上轻松实现部署&#xff0c;如ASP.NET, WinForms, .NET Core, JavaScript, WPF, Angular, Blazor, PHP, Java等&#xff0c;在你的应用程序中嵌入报告设计器…

华为OD机试模拟题 用 C++ 实现 - 猜字谜(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 最多获得的短信条数(2023.Q1)) 文章目录 最近更新的博客使用说明猜字谜题目输入输出描述备注示例一输入输出示例二输入输出思路Code使用说明 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,

IDEA配置 External Tool

有一些文件无法使用IDEA自带的工具打开&#xff0c;这时候就需要借助电脑上安装的第三方软件协助打开。比如使用电脑上安装的Notepad打开项目中的*.ppm文件。 一、配置External Tool 参数说明&#xff1a; 名称(Name)&#xff1a;将在IntelliJ IDEA界面&#xff08;“ 工具”菜…

什么是api接口?(基本介绍)

API:应用程序接口(API:Application Program Interface) 应用程序接口是一组定义、程序及协议的集合&#xff0c;通过 API 接口实现计算机软件之间的相互通信。API 的一个主要功能是提供通用功能集。程序员通过调用 API 函数对应用程序进行开发&#xff0c;可以减轻编程任务。 …

ROS1/2机器人操作系统与时间Time的不解之缘

时间对于机器人操作系统非常重要。所有机器人类的编程中所涉及的变量如果需要在网络中传输都需要这个数据结构的时间戳。宏观上&#xff0c;ROS1、ROS2各版本都有官方支持的时间节点。ROS时钟--支持时间倒计时小工具效果如下&#xff1a;如果要部署机器人操作系统&#xff0c;R…

IP路由原理、静态路由及动态路由区分

1、什么是路由? 路由器 在互联网中进行路由选择所使用的设备&#xff0c;或者说&#xff0c;实现路由的设备&#xff0c;我们称之为路由器。 路由器关键功能&#xff1a;检查数据包的目的地确定信息源发现可能的路由选择最佳路由验证和维护路由信息 什么是路由 路由是指导I…

洗地机什么牌子最好?洗地机品牌排行榜前十名

洗地机是近年来火热的清洁电器&#xff0c;凭借强劲的顽渍污渍去除和高效的地面清洁性能&#xff0c;成为了保持洁净家居环境、为生活做减法的黑科技&#xff0c;颇受生活达人们的追捧和青睐。洗地机的品牌、种类众多&#xff0c;一时间令人眼花缭乱。今天&#xff0c;我想为大…