我有以下存储过程:
Create FUNCTION createidentity7(new_browser_id bigint, sn smallint, sn_id bigint,
last_updated timestamp with time zone, cred_mask_pos integer)
RETURNS integer AS
$BODY$
DECLARE
mask integer = 0;
BEGIN
if (sn = 0 AND sn_id = 0) then
Select COALESCE(max(i.cred_mask_pos)+1,0) into mask FROM
identity i WHERE i.browser_id = @browser_id;
end if;
Insert into identity(browser_id, sn_id, last_updated, cred_mask_pos, sn)
Values(@new_browser_id, @sn_id, @last_updated::timestamp with time zone,
mask, @sn);
Return mask;
END;
$BODY$
Language 'plpgsql'
我打电话的时候:
select createidentity7
(0::bigint, 0::smallint, 0::bigint ,'2004-10-19 10:23:54+02', 0);
我收到此错误:
ERROR: operator does not exist: @ timestamp with time zone
SQL状态:42883 提示:没有运算符匹配给定的名称和参数类型。您可能需要添加显式类型转换。 上下文:SQL语句中的PL / pgSQL函数“createidentity7”第7行
这对任何人都响了吗?经过一番搜索,我找不到任何类似这个问题的东西。非常感谢帮助。
答案 0 :(得分:2)
您不需要@
符号来引用PLPGSQL中的变量,该语法来自(AFAIK)T-SQL。 @
符号用于PostgreSQL中的absolute value,PostgreSQL表示它不知道如何获取时间戳的绝对值。 @
可以正常使用其他参数,因为它们是数字的。删除@
标志,它应该有效。