Есть ли способ получить строки с помощью курсоров в PostgresSQL? - PullRequest
0 голосов
/ 24 марта 2019

Это мой первый курс обучения курсорам. У меня есть две таблицы: 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;

1 Ответ

0 голосов
/ 24 марта 2019

Вы объявили функцию как LANGUAGE sql, когда на самом деле это LANGUAGE plpgsql.

...