У меня есть процедура storerd, как показано ниже,
CREATE FUNCTION select_transactions3(text, text, int)
RETURNS SETOF transactions AS
$body$
DECLARE
rec transactions%ROWTYPE;
BEGIN
FOR rec IN (SELECT invoice_no, trans_date FROM transactions WHERE $1 = $2 limit $3 )
LOOP
RETURN NEXT rec;
END LOOP;
END;
$body$
LANGUAGE plpgsql VOLATILE SECURITY DEFINER;
, когда я выполняю запрос следующим образом:
select * from select_transactions3("invoice_no", '1103300105472',10);
или
select * from select_transactions3(invoice_no, '1103300105472',10);
он получает ошибку какэто: ОШИБКА: столбец "invoice_no" не существует
, но когда я пытаюсь выполнить с одним двоеточием, как это:
select * from select_transactions3('invoice_no', '1103300105472',10);
результат не является строкой.
как я могу получить такие данные:
invoice_no | trans_date
---------------+-------------------------
1103300105472 | 2011-03-30 12:25:35.694
спасибо.
ОБНОВЛЕНИЕ: Если нам нужен определенный столбец таблицы, который мы хотим показать
CREATE FUNCTION select_to_transactions14(_col character varying, _val character varying, _limit int)
RETURNS SETOF RECORD AS
$$
DECLARE
rec record;
BEGIN
FOR rec IN EXECUTE 'SELECT invoice_no, amount FROM transactions
WHERE ' || _col || ' = $1 LIMIT $2' USING _val, _limit LOOP
RETURN NEXT rec;
END LOOP;
END;
$$ LANGUAGE plpgsql;
чтобы получить результат:
SELECT * FROM select_to_transactions14( 'invoice_no', '1103300105472',1)
as ("invoice_no" varchar(125), "amount" numeric(12,2));