使用filepp预处理SQL文件时宏替换丢失行尾内容如何解决?
filepp宏替换丢失后续内容的解决方案
问题根因
filepp默认启用了函数式宏调用识别规则:如果定义无参数宏后,调用时宏名后紧跟括号,会被误判定为带参数的宏调用。你示例中CCSTRING后紧跟的VALUES(会被识别为宏的入参列表,而CCSTRING本身是无参数定义,因此预处理器仅输出宏本体的替换结果,直接丢弃后续所有内容。
可行解决方案
方案1:添加运行参数关闭无参宏的函数式识别(推荐,无需修改SQL文件)
运行filepp时添加-DCF参数,该参数会关闭无参数宏的函数式调用匹配逻辑,避免误识别后续括号为宏参数:
filepp -DCF 输入.sql -o 输出.sql
处理后会完整输出宏替换+后续的VALUES部分,符合预期。
方案2:修改宏定义为带空参数列表的形式
修改宏定义,明确声明该宏为无参数的函数式宏:
#define CCSTRING() INSERT INTO DOMPOSPBS(ID,POS,PBS,VARIANT,PATTERN,SUBPART,PVARS,km3pos,VISIBLE)
调用时同步添加空括号:
CCSTRING() VALUES('1','PM_T00_F4 (0)','3.4.2.3','','',@TOPS,'ANY','0',1);
该方案兼容性更强,不需要修改运行命令,适合需要固定预处理参数的场景。
内容的提问来源于stack exchange,提问作者GBBL
相关产品推荐
相关产品推荐

