You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Informatica预/后SQL执行PostgreSQL匿名PL/SQL块报错求助

解决Informatica中PostgreSQL匿名DO块的$$分隔符冲突问题

问题背景

在Informatica映射的源限定符Pre-SQL/Post-SQL中执行PostgreSQL匿名PL/pgSQL块时,使用标准的do $$ ... end $$;语法会触发CMN_1022错误,提示“未终止的美元引号字符串”。原因是Informatica默认将$识别为映射参数的占位符,而非PostgreSQL的美元引号分隔符。尝试在$间添加自定义标签、用单/双引号转义$均无效,且不想通过存储过程实现需求。

可行解决方案

方案1:用单引号替代美元引号(推荐简单场景)

将DO块的美元引号替换为单引号,同时对块内的单引号进行转义(PostgreSQL中使用两个连续单引号表示一个单引号)。示例代码:

do '
begin
   raise notice ''>>>>>>>>>>>>>>>>>>Test Proc'';
end';

适用场景:块内无多层单引号嵌套的简单逻辑,语法简洁易维护。

方案2:通过CHR函数动态生成美元引号(适用于复杂嵌套场景)

利用PostgreSQL的CHR(36)函数生成$符号,绕开Informatica的参数解析机制。将DO块的分隔符用CHR函数拼接,示例代码:

execute 'do ' || chr(36) || chr(36) || ' 
begin
   raise notice ''>>>>>>>>>>>>>>>>>>Test Proc'';
end ' || chr(36) || chr(36) || ';';

适用场景:块内存在多层单引号嵌套,用单引号转义会导致代码可读性差的情况。

方案3:禁用Informatica的$参数解析(全局设置,需谨慎)

如果当前映射及会话中未使用任何$开头的映射参数/变量,可以在会话属性中找到Enable $ Syntax选项,将其设置为False。此设置会让Informatica不再解析$为参数占位符,此时原有的do $$ ... end $$;代码可直接执行。
注意:该设置为会话级全局配置,若其他逻辑依赖$参数,会导致参数无法正常解析,需谨慎使用。

内容的提问来源于stack exchange,提问作者SteveTR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 07:22:36