动态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 ...
随机推荐
- 【安富莱】STM32H7用户手册发布,重在BSP驱动包设计方法,HAL库的框架学习,授人以渔,更新至63章(2019-07-21)
说明: 1.本教程重在BSP驱动包设计方法和HAL库的框架学习,并将HAL库里面的各种弯弯绕捋顺,从而方便我们的程序设计. 2.由于是基于HAL库的文档,所以不限制H7系列,其它F1,F2,F3,F4 ...
- 【Hash一致性算法】什么是Hash一致性算法
目录 1. 一致性Hash算法简介 环形Hash空间 把数据通过一定的hash算法处理后映射到环上 将机器通过hash算法映射到环上 机器的删除与添加 平衡性 本文转载自博客 1. 一致性Hash算法 ...
- CentOS7升级OpenSSL版本
1.CentOS7.6默认安装的openssl版本为 # 查看openssl版本 openssl version 2.下载最新的openssl wget https://www.openssl.org ...
- [Spring cloud 一步步实现广告系统] 5. 投放系统配置+启动+实体类
广告投放系统启动主类说明 /** * SponsorApplication for 广告赞助商/投递服务启动类 * 添加注解{@link EnableFeignClients}之后,当前微服务就可以调 ...
- 为Bootstrap Modal(模态框)全局添加拖拽操作
在js中绑定方法 $(document).on("show.bs.modal", ".modal", function(){ $(this).draggable ...
- Selenium(十三):验证码的处理、WebDriver原理
1. 验证码的处理 对于Web应用来说,大部分的系统在用户登录时都要求用户输入验证码.验证码的类型很多,有字母数字的.有汉字的,甚至还需要用户输入一道算术题的答案的.对于系统来说,使用验证码可以有效地 ...
- Java注解简单学习
注解(也被称作元数据)为我们在代码中添加信息提供了一种形式化的方法,使我们在稍后某个时刻可以很方便的使用这些数据,其在一定程度上将元数据与源代码文件结合在一起,而不是保存在外部文档中. 注解使我们可以 ...
- Mybatis专题
Java后端知识点汇总——Java基础专题 全套Java知识点汇总目录,见https://www.cnblogs.com/autism-dong/p/11831922.html 1.什么是Mybati ...
- k8s kubernetes 核心笔记 镜像仓库 项目k8s改造(含最新k8s v1.16.2版本)
k8s kubernetes 核心笔记 镜像仓库 项目k8s改造 2019/10/24 Chenxin 一 基本资料 一 参考: https://kubernetes.io/ 官网 https://k ...
- 转战物联网·基础篇05-通俗理解MQTT协议的实现原理和异步方式
网络上搜索MQTT协议,会出现太多的解释,这里就不做官方标准释义的复制了.这一节我们从实战理解角度,通俗的将MQTT协议的作用及实现原理说一下,旨在可以快速理解MQTT协议.所以可能会出现很多看似 ...