【发布时间】:2016-05-12 15:16:02
【问题描述】:
我在 Postgres 中创建了一个存储过程。即将从表Messages 中获取message_id 的最大值并存储在MessageID 列中的另一个表(MaxMessageID) 中。
这是我的存储过程:
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调用程序时。
我错过了什么?
【问题讨论】:
-
Messages中有什么内容?你能显示SELECT MAX(MESSAGE_ID) FROM Messages;的输出吗? -
@MichaelAmbrose,看到这里是输出prnt.sc/b37smr
-
接下来我会尝试看看问题是函数本身还是查询。当您运行
INSERT INTO MaxMessageID(MessageID) SELECT MAX(MESSAGE_ID) FROM Messages;时会发生什么?后续运行应继续向 MaxMessageID 添加行。 -
第一:你的函数中分配给
MID变量的值在哪里? -
第二个是有道理的。你应该得到空值,因为你没有给
MID赋值。您可以将SELECT INTO MID MAX(MESSAGE_ID) FROM Messages; raise notice '%', MID;添加到您的函数中并再次运行它吗?
标签: postgresql stored-procedures plpgsql