首页 文章

PostgreSQL:尝试使用时间戳插入表时出现神秘错误

提问于
浏览
0

我有以下存储过程:

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行

这对任何人都响了吗?经过一番搜索,我找不到任何类似这个问题的东西 . 非常感谢帮助 .

1 回答

  • 2

    您不需要 @ 标志来引用PLPGSQL中的变量,该语法来自(AFAIK)T-SQL . @ 符号用于PostgreSQL中的absolute value,PostgreSQL表示它不知道如何获取时间戳的绝对值 . @ 与其他参数一起工作正常,因为它们是数字的 . 删除 @ 标志,它应该工作 .

相关问题