вопрос по postgre 8.4 и returns table statement

Привет всем!

Вышла тут 8.4 Постгре версия. В ней появился RETURNS TABLE statement

Вопрос, подскажите, знатоки, как реализовать вот такую задачу, используя RETURNS TABLE, а не создание собственного Type (как это сделал я). Мне зачастую приходится делать функции, в которых надо выбрать 1-3 поля из 1 таблицы и все поля из другой...

CREATE OR REPLACE FUNCTION webgame_getquestionsbystepquest(sid bigint, dis integer)
  RETURNS SETOF type_svs AS
$BODY$
DECLARE DATA type_svs%rowtype;
DECLARE status_str varchar;
DECLARE sql varchar;
BEGIN
    status_str:='';
 
    IF sid > 0 THEN status_str := status_str || ' AND qs.sid =' || sid; END IF;
    IF dis >= 0 THEN status_str := status_str || ' AND qs.disable =' || dis; END IF;
 
     sql:='SELECT qs.sid, qs.disable, q.* FROM qs, q WHERE qs.q_id =  q.id  ' || status_str || ' ORDER BY qs.id ASC ';
    --RAISE EXCEPTION '%',sql;
    FOR DATA IN 
        EXECUTE sql
    LOOP
        RETURN next DATA;
    end loop;
    RETURN;
END;
$BODY$
  LANGUAGE 'plpgsql' IMMUTABLE SECURITY DEFINER
  COST 100
  ROWS 1000;

Таблица q:   id, name, sname, count
Таблица qs:  id,q_id,sid,disable,pid, mail, phone
 
Тип, который мне пришлось создать: type_svs: int, int, int, varchar, varchar, int

Back to top

(С) Виктор Вислобоков, 2008-2023