我在下面的示例中找到了如何创建动态位置的示例:
REPORT ZII_RKP_TEST1.
DATA: cond(72) TYPE c,
itab LIKE TABLE OF cond.
PARAMETERS: source(10) TYPE c, dest(10) TYPE c.
DATA wa TYPE spfli-cityfrom.
CONCATENATE 'CITYFROM = ''' source '''' INTO cond.
APPEND cond TO itab.
CONCATENATE 'OR CITYFROM = ''' dest '''' INTO cond.
APPEND cond TO itab.
CONCATENATE 'OR CITYFROM = ''' 'BAYERN' '''' INTO cond.
APPEND cond TO itab.
LOOP AT itab INTO cond.
WRITE cond.
ENDLOOP.
SKIP.
SELECT cityfrom
INTO wa
FROM spfli
WHERE (itab).
WRITE / wa.
ENDSELECT.来源:https://wiki.scn.sap.com/wiki/display/ABAP/Dynamic%2Bwhere%2Bclause
上面的示例使用诸如"BAYERN“这样的静态值,但是如果我使用任意值,那么我猜对于一些特殊的值(如''' ),情况可能会中断。
是否有必要做一些引用,使动态哪里不可打破?如果是的话,怎么做?
发布于 2018-10-08 09:47:13
应该使用cl_abap_dyn_prg=>quote( name )方法。
示例:
DATA(cond) = `country = 'DE' AND name = ` &&
cl_abap_dyn_prg=>quote( name ).来源:使用动态令牌的SQL注入
感谢桑德拉·罗西为我指明了正确的方向。
发布于 2018-10-02 11:32:37
您可以在“执行”中避开撇号,然后添加如下所示
PERFORM escape CHANGING source.
PERFORM escape CHANGING dest.
CONCATENATE 'CITYFROM = ''' source '''' INTO cond.
APPEND cond TO itab.
...
FORM escape CHANGING value TYPE c.
REPLACE ALL OCCURRENCES OF '''' IN value WITH ''''''.
ENDFORM.最新的ABAP版本包括转义函数的详细信息是这里。但它不包括引号转义。我们可以在类escape_quotes上使用静态cl_abap_dyn_prg方法,如下所示。
CALL METHOD cl_abap_dyn_prg=>escape_quotes
EXPORTING
val = source
receiving
out = output. 方法将类似于上面的内容执行。
发布于 2018-10-04 06:58:23
我想知道为什么这个例子是这样写的,也许它是一段旧代码。
第一:如果您的系统中有访问“新”字符串语法的权限,则只需使用以下内容
WHERE = |CITYFROM = '| && source && |'|.第二: string WHERE子句的好处是,您只需使用变量作为字符串的一部分,我的意思是,如果您只编写类似的内容
WHERE = 'CITYFROM = source'.ABAP将将其转换为适当的SQL,就好像您正在正确地编写SQL一样。
(我希望我能正确地解释自己,不要犹豫,问你是否有任何疑问)
https://stackoverflow.com/questions/52606842
复制相似问题