在Postgresql中使用带变量的转义字母

时间:2014-04-03 12:20:04

标签: postgresql postgresql-9.1

我使用触发器更新记录。

我试过了

CREATE OR REPLACE FUNCTION fn_trg_sales2()
  RETURNS trigger AS
$BODY$  declare

 xNarr text='';

 select name into xNarr from t1 where id =1;

 update t2 set narration =E narration || case when narration ='' then  xNarr else 
'\n' || xNarr end where id=1

return null;
 end; 
 $BODY$

以上程序显示错误。

如何使用变量在此更新查询中使用escape character?  如何使用带变量的转义字符?不要使用转义字符建议输出变量。

使用 postgresql 9.1

修改

我从某个命令获取信息,所以我在触发器中更新如下

update t2 set narration =narration || case when narration ='' then  xNarr else 
    quote_literal('\n') || xNarr end where id=1

现在它在表格中显示两行,但结尾并以'开头。

喜欢

narration

 this is first'
 'this is second 

如何存储单个qutoation?

1 个答案:

答案 0 :(得分:1)

String Constants with C-style Escapes中所述,包含带有反斜杠的转义序列的字符串必须以E开头,而E'line1\nline2'E'\n'仅适用于换行符。

这个E语法已经成为必需的,因为PostgreSQL 9.1的默认配置与standard_conforming_strings相同,正如同一地点的文档所警告的那样:

  

如果配置参数standard_conforming_strings已关闭,   然后PostgreSQL识别常规和反斜杠转义   转义字符串常量。但是,从PostgreSQL 9.1开始,默认为   on,表示反斜杠转义仅在转义中被识别   字符串常量。
  此行为更符合标准,但可能会中断   依赖历史行为的应用程序,反斜杠   逃避总是得到承认

quote_literal函数用于在将SQL语句提供给SQL解释器之前以编程方式构建它们,这就是它的结果包含单引号的原因。此功能不是必需的,对您的用例没有帮助。