我有一个函数,如果它们不为null或为空,则将多个参数组合在一个字符串中。在特定参数上,我对LIKE条件使用%字符。 我的问题是格式函数,它试图对它进行转换,就像它是一个参数一样。我怎么能避免这个?
我有10多个参数测试和多个LIKE。 在下面的示例中,第二个FORMAT函数尝试转换TEST%
中的%_nom_personne_like := 'TEST%';
_type_activite_personne := 'SOMETHING';
IF _nom_personne_like != '' THEN
_query := _query || ' AND personne_planning.nom_personne LIKE %L ';
_query := FORMAT(_query,_nom_personne_like);
END IF;
IF _type_activite_personne != '' THEN
_query := _query || ' AND personne_planning.type_activite = %L ';
_query := FORMAT(_query,_type_activite_personne);
END IF;`
服务器返回的消息是:转换类型说明符«'»无法识别 我已经尝试将%加倍,但它不起作用。
答案 0 :(得分:2)
由于更好的可读性,我更喜欢format()
字符串连接。
我遵循规则不使用变量作为函数的第一个参数。
您的代码可能如下所示:
_nom_personne_like := 'TEST%';
_type_activite_personne := 'SOMETHING';
IF _nom_personne_like != '' THEN
_query :=
format(
'%s AND personne_planning.nom_personne LIKE %L ',
_query,
_nom_personne_like);
END IF;
IF _type_activite_personne != '' THEN
_query :=
format(
'%s AND personne_planning.type_activite = %L ',
_query,
_type_activite_personne);
END IF;`
答案 1 :(得分:1)
你可以忘记format()
这样的功能:
_nom_personne_like := 'TEST%';
_type_activite_personne := 'SOMETHING';
IF _nom_personne_like != '' THEN
_query := _query || ' AND personne_planning.nom_personne LIKE ' ||
quote_literal(_nom_personne_like);
END IF;
IF _type_activite_personne != '' THEN
_query := _query || ' AND personne_planning.type_activite = ' ||
quote_literal(_type_activite_personne);
END IF;