ABAP 动态SQL语句
动态定义SELECT字段
可以动态定义SELECT语句字段。保存动态语句的结构体GS_LINE最多可以容纳72位CHAR类型。结构体GS_LINE为null时与 * 相同,相当于SELECT。
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。例子:
DATA:GT_ITAB TYPE STANDARD TABLE OF SFLIGHT. DATA:GS_ITAB LIKE LINE OF GT_ITAB. DATA:GS_LINE TYPE C LENGTH 72."最多恶意容纳72位CHAR类型 DATA:GT_LIST LIKE TABLE OF GS_LINE(72). GS_LINE = 'CARRID CONNID'. SELECT DISTINCT (GS_LINE) INTO CORRESPONDING FIELDS OF TABLE GT_ITAB FROM SFLIGHT. IF SY-SUBRC = 0. LOOP AT GT_ITAB INTO GS_ITAB. WRITE:/ GS_ITAB-CARRID,GS_ITAB-CONNID. ENDLOOP. ENDIF.
动态指定SELECT语句的WHERE条件
可以动态地写SELECT语句的WHERE条件。下列语句中的itab可以定义成最大为72位的内表。
SELECT...WHERE(<itab>)
例子1:
DATA GS_WHERE TYPE C LENGTH 72. DATA GV_CARRNAME TYPE SCARR-CARRNAME. DATA GV_CARRID TYPE SCARR-CARRID VALUE 'AC'. CONCATENATE 'CARRID = '''GV_CARRID'''' INTO GS_WHERE. SELECT SINGLE CARRNAME INTO GV_CARRNAME FROM SCARR WHERE (GS_WHERE). WRITE:/ GV_CARRNAME.
结果:
是在数据库表SCARR中读取字段值CARRID等于AC的SELECT语句,在这里动态的给出了WHERE条件。
当需要给出两个字段以上查询条件时要把查询条件追加到内表中使用,如以下例子。
例子2:
结果:
知识点:单引号是特殊字符,如果要用到单引号,必须得转义,'',即两个单引号。SQL语句查询条件为字符时需要加单引号。
CONCATENATE 'CARRID = '''GV_CARRID1'''' INTO GS_WHERE.
按照正常写法应是 CARRID = '变量'.现在把变量用单引号引起来,也就是 ''GV_CARRID1'',然后前后两个 ' 。
所以结果就是: 'CARRID = '''GV_CARRID1''''
下面同样有段解释来源:http://www.cnblogs.com/rainysblog/p/6514946.html
一些教训:单引号是特殊字符,如果要用到单引号,必须得转义,'',即两个单引号。SQL语句查询条件为字符时,
需要加单引号。CONCATENATE 'and SPRAS = ''' lan '''' INTO where_tab.
实际上是三个字符串连接成一个字符串存放到内表中,and SPRAS = '变量',
前面是一个字符串,and SPRAS = '',中间是一个变量 lan,后面是一个单引号'' ,所以合起来就是 CONCATENATE ' and SPRAS = ''' lan '''' INTO where_tab.
关于字符串的连接和单引号的使用,需要去体会和实践一下。这是关于在SAP中如何多条件语句的使用示例。
注意:WHERE (where_tab) 。括号必须紧跟着这个内表,不能有空格。
