有时候屏幕条件中使用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屏幕条件选择(里面还有赋值的新语法)的更多相关文章

  1. Mybatis中动态SQL多条件查询

    Mybatis中动态SQL多条件查询 mybatis中用于实现动态SQL的元素有: if:用if实现条件的选择,用于定义where的字句的条件. choose(when otherwise)相当于Ja ...

  2. .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. ...

  3. 你好,C++(19)“老师,我这次四级考试过了没有?”——4.2 条件选择语句

    4.2  条件选择语句 “老师,我这次四级考试过了没有?” 如果老师被问到这个问题,他会如何回答?是的,他会根据不同的条件选择不同的回答: 如果考试成绩大于等于60,那就回答:“恭喜你,你通过了这次考 ...

  4. 接口的绑定方案和动态SQL

    1. 接口绑定方案 MyBatis中, 提供了一套接口绑定方案. 程序员可以提供一个接口, 然后提供对应接口的一个mapper.xml文件. MyBatis会自动将接口和xml文件进行绑定. 实际上就 ...

  5. Mybatis学习第三天——输入输出映射以及动态SQL

    注意:以下传入数据与输出数据类型部分使用别名的方式,别名在SqlMapConfig.xml核心文件中配置 1.输入映射 1.1 传递简单数据类型 1.2 传递pojo中的类类型 1.3 传递Query ...

  6. 动态SQL之、条件判断(转)

    错误方式一: 在mybatis的动态sql语句中使用<if>标签可以判断sql中的条件是否成立. <select id="getPerson" resultTyp ...

  7. MyBatis中动态SQL语句完成多条件查询

    一看这标题,我都感觉到是mybatis在动态SQL语句中的多条件查询是多么的强大,不仅让我们用SQL语句完成了对数据库的操作:还通过一些条件选择语句让我们SQL的多条件.动态查询更加容易.简洁.直观. ...

  8. MyBatis动态SQL第一篇之实现多条件查询(if、where、trim标签)

    一.动态SQL概述 以前在使用JDBC操作数据时,如果查询条件特别多,将条件串联成SQL字符串是一件痛苦的事情.通常的解决方法是写很多的if-else条件语句对字符串进行拼接,并确保不能忘了空格或在字 ...

  9. (转)[SQL Server] 动态sql给变量赋值(或返回值给变量)

    本文转载自:http://blog.csdn.net/xiaoxu0123/article/details/5684680 [SQL Server] 动态sql给变量赋值(或返回值给变量) decla ...

随机推荐

  1. Java描述设计模式(09):装饰模式

    本文源码:GitHub·点这里 || GitEE·点这里 一.生活场景 1.场景描述 孙悟空有七十二般变化,他的每一种变化都给他带来一种附加的本领.他变成鱼儿时,就可以到水里游泳:他变成鸟儿时,就可以 ...

  2. C# 波浪线绘制

    波浪线效果如上 界面绘制操作 private Point? _startPoint = null; private void ContainerCanvas_OnPreviewMouseLeftBut ...

  3. Eclipse中Junit测试中@Before不执行

    场景 在使用Junit进行单元测试时,一部分获取JPA的entityManager的代码将其放在了 @Before标注的方法中,这样每次执行@TEST标注的方法时会首先执行@Before标注的方法. ...

  4. localstorage实现两个页面通信,购物车原理。

    如:A,B页面,A为商品页,B为购物车页,两个页面同时打开,在A页面点击商品添加至购物车,切换到B页面购物车怎么显示该商品信息 利用localStroage,A页面将数据存入localStroage, ...

  5. SQL Server存储过程数据库日志文件备份的脚本-干货

    还是拿数据库AAAAAAAA为例子        CREATE PROC [dbo].[p_log_backupAAAAAAAA]    @dbname sysname='',             ...

  6. 由导入paramkio包失败,而pip list又能查到此包,而引出的:离线安装python第三方库的实用方法:解决公司内网,服务器/电脑不能上网却需要安装python三方库问题(下:Linux环境中)

    问题描述: 公司的Linux服务器是内网,今天要实现某个功能,会用到python控制ssh,需要安装一个Paramkio库,和上一篇一样,仅仅依靠Pypi上下载下来的离线.whl安装包是不行的,lin ...

  7. 对于Python语音性能的一些个人见解

    虽然运行速度慢是 Python 与生俱来的特点,大多数时候我们用 Python 就意味着放弃对性能的追求.但是,就算是用纯 Python 完成同一个任务,老手写出来的代码可能会比菜鸟写的代码块几倍,甚 ...

  8. TensorFlow从1到2(十四)评估器的使用和泰坦尼克号乘客分析

    三种开发模式 使用TensorFlow 2.0完成机器学习一般有三种方式: 使用底层逻辑 这种方式使用Python函数自定义学习模型,把数学公式转化为可执行的程序逻辑.接着在训练循环中,通过tf.Gr ...

  9. MySQL的事务隔离

    提到事务,你肯定会想到ACID(Atomicity.Consistency.Isolation.Durability,即原子性.一致性.隔离性.持久性),今天我们就来说说其中I,也就是“隔离性”. 数 ...

  10. element-ui 中dialog居中

      .el-dialog{        display: flex;        flex-direction: column;        margin:0 !important;       ...