我在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调用程序时。
我错过了什么?
答案 0 :(得分:0)
我在Postgres中创建了一个存储过程。
Postgres没有“存储过程”。只有功能,几乎但不完全相同:
...当我检查输出表时
你如何确切地检查?在任何情况下,您的函数都将返回NULL:
RETURN MID;
从未分配MID
。到目前为止,您的返回值没有意义。
通过MaxMessageID
查看目标表SELECT * FROM MaxMessageID
进行检查。如果您看到包含maxmessageid IS NULL
的单行,则有两种可能的解释:
表message_id
中的列messages
中没有值。然后结果是设计的。
您会混淆表名或列名。您的未加引号的CaMeL案例标识符就是这种可疑方式。您是否知道Postgres标识符 区分大小写 ?
Postgres数据库中可以有多个 架构 :