Это мой первый курс обучения курсорам. У меня есть две таблицы: drink d
и cart c
. Они оба содержат общий первичный ключ, где c.did = d.did
. (где did
= идентификатор напитка). Я пытаюсь взять teatype
от объединения обеих строк, чтобы я мог обновить запас teatype
. Например, если он возвращает:
-----------
| teatype|
-----------
Oolong
Green Tea
Oolong
Затем я перебрал бы эту запись, чтобы я мог обновить запас этой конкретной teatype
в другой таблице tea
, которая содержит столбцы, stock
, где teatype
= teatype
курсор.
Проблема, с которой я сталкиваюсь, заключается в том, что я не знаю, как правильно реализовать курсор, чтобы он мог циклически обновляться. Я столкнулся с проблемами, говоря, что есть syntax error ar or near end
или 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;