在Postgres中没有函数的结果
我在Postgres中创建了一个存储过程。它将从表Messages
获取最大值message_id
,并将其存储在MessageID
列中的另一个表(MaxMessageID
)中。在Postgres中没有函数的结果
这里是我的存储过程:
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(邮件ID)。
当我运行的程序,检查下面的命令:
Select * from MaxMessageID
它shows this。但是当我打电话给Select MaxId()
,。
我错过了什么?
我在Postgres中创建了一个存储过程。
Postgres没有“存储过程”。只有功能,做差不多,但不完全一样:
...当我检查我的输出表
如何你检查什么呢?你的功能是要在任何情况下返回NULL:
RETURN MID;
而且MID
从未分配。你的回报价值目前没有意义。
通过查看目标表MaxMessageID
与SELECT * FROM MaxMessageID
进行检查。如果你看到一个单行maxmessageid IS NULL
,有两种可能的解释:
在
message_id
列在表messages
没有价值。然后结果是设计。-
您正在混淆表名或列名。你的不加引号的CaMeL-case标识符是可疑的。您是否知道Postgres标识符是区分大小写?
而且可以有多个模式在Postgres数据库:
我理解你的概念,但我唯一的担心,为什么是没有获取表MaxMessageID的列message_id中的值。我正在调用像这样的过程Select MaxId();我个人的查询工作正常...我错过任何东西来获得所需的结果? – Kate
@Kate:没有列'message_id'。似乎有一个“MaxMessageID”,“MessageID”或“maxmessageid.messageid”,具体取决于您是否在创建时使用了双引号。我的建议是专门使用合法的,小写的,不加引号的标识符来避免这种混淆。按照我提供的链接阅读关于标识符的手册。 –
我会小心地调用Postgres标识符区分大小写。如果使用双引号,则区分大小写。如果她使用无效标识符,她会得到错误,而不是空响应。 –
“消息”是什么? 你可以显示'SELECT MAX(MESSAGE_ID)FROM消息的输出;'? –
@MichaelAmbrose,看到这里的输出http://prnt.sc/b37smr – Kate
接下来我会尝试,看看问题是功能本身还是查询。当你运行INSERT INTO MaxMessageID(MessageID)SELECT MAX(MESSAGE_ID)FROM Messages;'?后续运行应该继续向MaxMessageID添加行。 –