首页 > 解决方案 > 有没有办法在 PostgresSQL 中使用游标来获取行?

问题描述

这是我第一次学习游标。我有两张桌子:drink dcart c。它们都包含一个共同的主键,其中c.did = d.did. (其中did= 饮料 ID)。我正在尝试将teatypefrom 加入两行,以便我可以更新teatype. 例如,如果它返回:

-----------
| teatype|
-----------
Oolong
Green Tea
Oolong

然后我将遍历该记录,以便我可以更新包含列teatype的另一个表中特定的库存,其中光标的= 。teastockteatypeteatype

我遇到的问题是不知道如何正确实现游标,以便它可以循环通过以更新库存。我遇到了说 theres asyntax error ar or near end或 at 的问题if。我浏览了整个网络,但找不到正确的资源。

我试过将程序语句放在一个函数中,但这没有帮助。似乎我没有走在正确的轨道上,也不知道如何解决这个问题。我的代码如下,我正在尝试在 PostgresSQL 服务器中运行它。

CREATE OR REPLACE FUNCTION foo()
RETURNS VOID AS $$

DECLARE
        tea_type RECORD;
        TeaCursor CURSOR FOR
                SELECT teatype FROM cart c
                JOIN drink d ON c.did = d.did;

Begin        

        OPEN TeaCursor;

        LOOP
        FETCH from TeaCursor into tea_type;
                exit when tea_type = null;

                UPDATE tea t
                        SET stock = stock - 1
                        WHERE t.type = tea_type.teatype;
                end if;
        END LOOP;

        close TeaCursor;
End;

$$LANGUAGE sql stable;

我应该期待类似的UPDATE 1东西,或者说它已经成功地减少了特定的库存teatype。相反,我不断收到这样的错误:

psql:test.sql:27: ERROR:  syntax error at or near "RECORD"
LINE 5:  tea_type RECORD;

标签: sqlpostgresqlsql-functiondatabase-cursor

解决方案


您将函数声明为LANGUAGE sql当它真正是时LANGUAGE plpgsql


推荐阅读