sql - 有没有办法在 PostgresSQL 中使用游标来获取行?
问题描述
这是我第一次学习游标。我有两张桌子:drink d
和cart c
。它们都包含一个共同的主键,其中c.did = d.did
. (其中did
= 饮料 ID)。我正在尝试将teatype
from 加入两行,以便我可以更新teatype
. 例如,如果它返回:
-----------
| teatype|
-----------
Oolong
Green Tea
Oolong
然后我将遍历该记录,以便我可以更新包含列teatype
的另一个表中特定的库存,其中光标的= 。tea
stock
teatype
teatype
我遇到的问题是不知道如何正确实现游标,以便它可以循环通过以更新库存。我遇到了说 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;
解决方案
您将函数声明为LANGUAGE sql
当它真正是时LANGUAGE plpgsql
。
推荐阅读
- reactjs - 点击SVG时获取父元素
- hashable - 为什么当我们做 dir(mutable_obj) 时 Python 中的可变类型也有一个哈希方法
- gitlab - Gitlab CI 管道:从 CI 管道向讨论添加消息
- python - Keras Model.predict 返回错误“矩阵大小不兼容”
- css - CSS隐藏具有特定ID的元素的同级样式
- javascript - Formik 在空字段上也显示错误
- c# - 使用Linq c#将DataTable转换为带有组的json
- javascript - 为什么我调用另一个异步函数的异步函数返回 Promise {
} 而不是一个值? - python - page_content.count 中的错误字数 (PyPDF2)
- powershell - 为什么我会收到 VMExtensionProvisioningError。无法下载所有指定文件?