使用定制宏的准则
创建或使用定制宏时,请记住以下准则:
*
*
如果以属性 ENABLE_SELECT_SORT_BY = TRUE 配置了数据源,那么您必须ORDER BY 子句编写原始 SQL 定制宏,以便按您在其下工作的受众级别的受众关键字段将返回的记录排序。 否则,如果排序顺序与预期不同,那么在“快照”过程中的派生字段内使用定制宏的时候,会生成错误。
*
*
定制宏在其底层的逻辑中使用临时表时,临时表将强制适合数据库,以便逻辑不会失败。
但是,如果在顶级 SELECT 中使用定制宏,那么没有历史记录可供 Campaign 用于强制临时表适合数据库,然后逻辑会失败。
这样,创建使用原始 SQL 的定制宏时,您可能需要创建同一定制宏的两个版本:一个版本使用临时表标记而另一个不使用这些标记。
没有临时表标记的定制宏可以在树顶部使用(例如,在第一个 SELECT 处)。在可能存在可利用的临时表时,具有临时表标记的定制宏可以在树中的其他任何位置使用。
*
例如,如果您使用可返回值的基于原始 SQL 的定制宏,且(例如,在“快照”过程中)您从该定制宏基于的表输出定制宏和另一字段,那么 Campaign 对该表执行自连接。如果该表未规范化,那么您将以笛卡尔乘积结束(即,显示的记录数超过您的预期)。
*
在执行时,通过在 UA_CustomMacros 系统表(其中存储定义)中查找定制宏的定义来解析定制宏,然后使用/执行此宏。
*
Campaign 支持来自较早发行版的存储查询。但是,对非独特存储查询的引用必须使用旧语法:
storedquery(<query name>)
*
解析定制宏中的用户变量时,Campaign 在检查语法时使用用户变量的当前值。如果当前值留空,那么 Campaign 将生成错误。
*
*
如果您意图跨若干不同的数据库使用定制宏,那么您可能希望使用 IBM® 表达式而不是原始 SQL,因为原始 SQL 会特定于特别的数据库。
*
*
Campaign 将逗号视为参数分隔符。如果您将逗号用作参数中的字面值字符,请用左右方括号 ({}) 将文本括起来,如以下示例中所示:
TestCM( {STRING_CONCAT(UserVar.Test1, UserVar.Test2) } )
*
Campaign 支持使用原始 SQL 代码简单替换定制宏中的参数。例如,如果您在包含此查询的流程图上设置“选择”流程框:
exec dbms_stats.gather_table_stats(tabname=> <temptable>,ownname=> 'autodcc')
Campaign 将成功用实际临时表替换 <temptable> 标记。请注意,表名称需要用单引号引起来。
下表显示 Campaign 在查询和派生字段中如何处理定制宏。
查询和派生字段中的定制宏(“选择”过程、细分市场流程和“受众”过程)
如果没有以此方式使用该值,那么对于标识选择,Campaign 将非零值视为 TRUE,将零值和字符串视为 FALSE。
IBM® 表达式
在原始 SQL 查询中(“选择”过程、细分市场流程和“受众”过程)
IBM® 表达式