动态SQL屏幕条件选择(里面还有赋值的新语法)
有时候屏幕条件中使用PARAMETERS时候,如果你为空的话,会查不出数据,但是可能你的想法是不想限制而已,但是系统默认理解为了空值,这个时候,如果取判断一下条件是不是空,在SQL里决定写不写的话,会导致很多的代码,当然理论上是可以的,现在介绍一种可以随机应变的屏幕条件选择的写法,可以省下很多的代码,例子如下。
第一种写法,代码如下:
SELECT-OPTIONS:S_ERZET FOR VBAK-ERZET,
S_ERNAM FOR VBAK-ERNAM.
PARAMETERS:P_VBELN TYPE VBAK-VBELN,
P_ERDAT TYPE VBAK-ERDAT.
DATA: LT_WHERE TYPE STRING.
IF P_VBELN IS NOT INITIAL.
LT_WHERE = 'VBELN = @P_VBELN AND' .
ENDIF.
IF P_ERDAT IS NOT INITIAL.
LT_WHERE = |{ LT_WHERE } ERDAT = @P_ERDAT AND|.
ENDIF.
LT_WHERE = |{ LT_WHERE } ERZET IN @S_ERZET AND ERNAM IN @S_ERNAM|.
*---如果里面有固定值也可以写进去------
"LT_WHERE = |{ LT_WHERE } ERDAT = '20180202' AND ERZET IN @S_ERZET AND ERNAM IN @S_ERNAM|.
*当然如果使用CONCATENATE拼字符串的老语法的话,需要如下写法,将固定值需要由3个引号包起来
"CONCATENATE LT_WHERE 'ERDAT = ' '''20180202''' 'AND ERZET IN @S_ERZET AND ERNAM IN @S_ERNAM' INTO LT_WHERE SEPARATED BY SPACE.
*-----有时候不知道需要多少个AND连接时候,保险做法可以合理使用去除字符串右边或者左边的and-------
"SHIFT LT_WHERE LEFT DELETING LEADING 'AND'.
"SHIFT LT_WHERE RIGHT DELETING TRAILING 'AND'.
IF LT_WHERE IS NOT INITIAL."判断where条件是不是为空。
SELECT VBELN,ERDAT,ERZET,ERNAM FROM VBAK UP TO ROWS INTO TABLE @DATA(LT_VBAK) WHERE (LT_WHERE) .
ELSE.
SELECT VBELN,ERDAT,ERZET,ERNAM FROM VBAK UP TO ROWS INTO TABLE @LT_VBAK.
ENDIF.
CL_DEMO_OUTPUT=>DISPLAY( LT_VBAK ).
第二种写法代码如下(里面还有赋值的新语法):
DATA:S_VBELN TYPE RANGE OF VBAK-VBELN, "相当于select-option:S_WERKS FOR MARD-WERKS,不过这样写就没有屏幕展示了
S_ERDAT TYPE RANGE OF VBAK-ERDAT.
DATA:S_ERZET TYPE RANGE OF VBAK-ERZET."相当于select-option:S_WERKS FOR MARD-ERZET
DATA:S_ERNAM TYPE RANGE OF VBAK-ERNAM."相当于select-option:S_WERKS FOR MARD-ERNAM
S_VBELN = VALUE #( SIGN ='I' OPTION = 'BT' ( LOW = HIGH = )
( LOW = HIGH = )
OPTION = 'NB' ( LOW = ) ).
DATA: LT_WHERE TYPE STRINGTAB."这个是内表
INSERT CONV #( 'VBELN IN @S_VBELN ' ) INTO TABLE LT_WHERE.
INSERT CONV #( 'AND ERDAT IN @S_ERDAT ' ) INTO TABLE LT_WHERE.
INSERT CONV #( 'AND ERZET IN @S_ERZET AND ERNAM IN @S_ERNAM' ) INTO TABLE LT_WHERE.
IF LT_WHERE IS NOT INITIAL."判断where条件是不是为空。
SELECT VBELN,ERDAT,ERZET,ERNAM FROM VBAK UP TO ROWS INTO TABLE @DATA(LT_VBAK) WHERE (LT_WHERE) .
ELSE.
SELECT VBELN,ERDAT,ERZET,ERNAM FROM VBAK UP TO ROWS INTO TABLE @LT_VBAK.
ENDIF.
CL_DEMO_OUTPUT=>DISPLAY( LT_VBAK ).
动态SQL屏幕条件选择(里面还有赋值的新语法)的更多相关文章
- Mybatis中动态SQL多条件查询
Mybatis中动态SQL多条件查询 mybatis中用于实现动态SQL的元素有: if:用if实现条件的选择,用于定义where的字句的条件. choose(when otherwise)相当于Ja ...
- .Net程序员学用Oracle系列(28):PLSQL 之SQL分类和动态SQL
1.SQL 语句分类 1.1.分类方法及类型 1.2.数据定义语言 1.3.数据操纵语言 1.4.其它语句 2.动态 SQL 理论 2.1.动态 SQL 的用途 2.2.动态 SQL 的语法 2.3. ...
- 你好,C++(19)“老师,我这次四级考试过了没有?”——4.2 条件选择语句
4.2 条件选择语句 “老师,我这次四级考试过了没有?” 如果老师被问到这个问题,他会如何回答?是的,他会根据不同的条件选择不同的回答: 如果考试成绩大于等于60,那就回答:“恭喜你,你通过了这次考 ...
- 接口的绑定方案和动态SQL
1. 接口绑定方案 MyBatis中, 提供了一套接口绑定方案. 程序员可以提供一个接口, 然后提供对应接口的一个mapper.xml文件. MyBatis会自动将接口和xml文件进行绑定. 实际上就 ...
- Mybatis学习第三天——输入输出映射以及动态SQL
注意:以下传入数据与输出数据类型部分使用别名的方式,别名在SqlMapConfig.xml核心文件中配置 1.输入映射 1.1 传递简单数据类型 1.2 传递pojo中的类类型 1.3 传递Query ...
- 动态SQL之、条件判断(转)
错误方式一: 在mybatis的动态sql语句中使用<if>标签可以判断sql中的条件是否成立. <select id="getPerson" resultTyp ...
- MyBatis中动态SQL语句完成多条件查询
一看这标题,我都感觉到是mybatis在动态SQL语句中的多条件查询是多么的强大,不仅让我们用SQL语句完成了对数据库的操作:还通过一些条件选择语句让我们SQL的多条件.动态查询更加容易.简洁.直观. ...
- MyBatis动态SQL第一篇之实现多条件查询(if、where、trim标签)
一.动态SQL概述 以前在使用JDBC操作数据时,如果查询条件特别多,将条件串联成SQL字符串是一件痛苦的事情.通常的解决方法是写很多的if-else条件语句对字符串进行拼接,并确保不能忘了空格或在字 ...
- (转)[SQL Server] 动态sql给变量赋值(或返回值给变量)
本文转载自:http://blog.csdn.net/xiaoxu0123/article/details/5684680 [SQL Server] 动态sql给变量赋值(或返回值给变量) decla ...
随机推荐
- opencv-python图像二值化函数cv2.threshold函数详解及参数cv2.THRESH_OTSU使用
cv2.threshold()函数的作用是将一幅灰度图二值化,基本用法如下: #ret:暂时就认为是设定的thresh阈值,mask:二值化的图像 ret,mask = cv2.threshold(i ...
- jmeter 中使用正则表达式提取依赖参数
1:登录接口 这里有一个实际的登录接口,在响应中返回了一串token,如下图 那么我们在接下来的接口-经验库列表中,就必须带入这一串token,否则响应报错,如下图所示 如何获取登录的口令呢?这 ...
- SpringBoot2.0 整合 Redis集群 ,实现消息队列场景
本文源码:GitHub·点这里 || GitEE·点这里 一.Redis集群简介 1.RedisCluster概念 Redis的分布式解决方案,在3.0版本后推出的方案,有效地解决了Redis分布式的 ...
- 简单实用的原生PHP分页类
一款简单实用的原生PHP分页类,分页按钮样式简洁美观,页码多的时候显示“...”,也是挺多网站用的效果 核心分页代码 include_once("config.php"); req ...
- GO基础之Map
go开发手册: https://studygolang.com/pkgdoc 一.什么是map 有资料翻译成地图.映射或字典.但是大多数习惯上翻译成集合.1.map是Go中的内置类型,它将一个值与 ...
- scrapy实例:爬取天气、气温等
1.创建项目 scrapy startproject weather # weather是项目名称 scrapy crawl spidername开始运行,程序自动使用start_urls构造Requ ...
- PC/SC双界面读写器开发指南
友我科技PCSC双界面读写器YW-606开发指南 1.建立资源管理器的上下文 函数ScardEstablishContext()用于建立将在其中进行设备数据库操作的资源管理器上下文(范围). 函数原型 ...
- Spring Boot 2 使用Servlet、Listener和Filter配置
开发环境:IntelliJ IDEA 2019.2.2Spring Boot版本:2.1.8 新建一个名称为demo的Spring Boot项目. 一.使用Servlet配置 1.修改启动类 Demo ...
- SpringBoot高版本修改为低版本时测试类报错解决
有时在使用idea通过Spring Initailizr创建项目时,默认只能创建最近的版本的SpringBoot项目. 这是如果想要换成版本,就可以在项目创建好了之后,在pom文件中直接将版本修改过来 ...
- php对微信支付回调处理的方法(合集)
支付完成后,微信会把相关支付结果和用户信息发送给商户,商户需要接收处理,并返回应答. 对后台通知交互时,如果微信收到商户的应答不是成功或超时,微信认为通知失败,微信会通过一定的策略定期重新发起通知,尽 ...