在Postgres中没有得到函数的结果

时间:2016-05-12 15:16:02

标签: postgresql stored-procedures plpgsql

我在Postgres中创建了一个存储过程。它将从表message_id中获取Messages的最大值,并存储在MaxMessageID列中的另一个表(MessageID)中。

这是我的存储过程:

CREATE OR REPLACE FUNCTION MaxId()
RETURNS integer AS $MID$
declare
    MID integer;
BEGIN
    DELETE FROM MaxMessageID;
    INSERT INTO MaxMessageID(MessageID)
        SELECT MAX(MESSAGE_ID) FROM Messages;
   RETURN MID;
END;
$MID$ LANGUAGE plpgsql;

运行此过程后,max(MESSAGE_ID)应存储在MaxMessageID(MessageID)中。

当我运行程序并检查以下命令时:

  Select * from MaxMessageID

shows this。但是,当我使用Select MaxId()it shows this调用程序时。

我错过了什么?

1 个答案:

答案 0 :(得分:0)

  

我在Postgres中创建了一个存储过程。

Postgres没有“存储过程”。只有功能,几乎但不完全相同:

  

...当我检查输出表时

你如何确切地检查?在任何情况下,您的函数都将返回NULL:

RETURN MID;

从未分配MID。到目前为止,您的返回值没有意义。

通过MaxMessageID查看目标表SELECT * FROM MaxMessageID进行检查。如果您看到包含maxmessageid IS NULL的单行,则有两种可能的解释:

  1. message_id中的列messages中没有值。然后结果是设计的。

  2. 您会混淆表名或列名。您的未加引号的CaMeL案例标识符就是这种可疑方式。您是否知道Postgres标识符 区分大小写

    Postgres数据库中可以有多个 架构