Использование временной таблицы в PL / pgSQL процедура очистки таблиц

Я пытаюсь удалить все данные, относящиеся к идентификатору пользователя, из игровой базы данных.

Есть таблица, содержащая все игры (в каждой из которых играют по 3 игрока):

# select * from pref_games where gid=321;
 gid | rounds |          finished
-----+--------+----------------------------
 321 |     17 | 2011-10-26 17:16:04.074402
(1 row)

И есть таблица, в которой хранятся результаты игроков за эту игру № 321:

# select * from pref_scores where gid=321;
      id       | gid | money | quit
----------------+-----+-------+------
 OK531282114947 | 321 |   218 | f
 OK501857527071 | 321 |  -156 | f
 OK429671947957 | 321 |   -62 | f

Когда я пытаюсь выполнить следующий оператор SELECT INTO для psql- приглашение PostgreSQL, похоже, работает, как ожидалось (и временная таблица исчезает при закрытии сеанса):

# select gid into temp temp_gids from pref_scores where id='OK446163742289';
SELECT

# select * from temp_gids ;
 gid
------
 1895
 1946
 1998
 2094
 2177
 2215
(6 rows)

Но когда я пытаюсь создать свою процедуру PL / pgSQL, я получаю сообщение об ошибке:

    create or replace function pref_delete_user(_id varchar)
        returns void as $BODY$
            begin

            select gid into temp temp_gids from pref_scores where id=_id;
            delete from pref_scores where gid in
                (select gid from temp_gids);
            delete from pref_games where gid in
                (select gid from temp_gids);

            delete from pref_rep where author=_id;
            delete from pref_rep where id=_id;

            delete from pref_catch where id=_id;
            delete from pref_game where id=_id;
            delete from pref_hand where id=_id;
            delete from pref_luck where id=_id;
            delete from pref_match where id=_id;
            delete from pref_misere where id=_id;
            delete from pref_money where id=_id;
            delete from pref_pass where id=_id;
            delete from pref_status where id=_id;
            delete from pref_users where id=_id;

            end;
    $BODY$ language plpgsql;

Ошибка:

ERROR:  syntax error at "temp"
DETAIL:  Expected record variable, row variable, or list of scalar variables following INTO.
CONTEXT:  compilation of PL/pgSQL function "pref_delete_user" near line 3

Почему что (временные таблицы здесь не разрешены?) и где сохранить мой временный список gid, которые нужно удалить?

(И я бы предпочел не использовать "каскад удаления", потому что я еще не привык к этому и мои скрипты / база данных еще не подготовлены для этого).

9
задан Alexander Farber 28 October 2011 в 17:52
поделиться