2016-03-22 2 views
0

У меня есть таблица с 2 столбцами. Первый серийный и второй - это запрос, который хранится в виде текста. Для более простого вопроса, в конце: я хочу создать функцию, в которую я буду вводить номер серийника в качестве параметра, и функция вернет мне результат запроса, который находится во втором столбце.Запустить текст как запрос

Я знаю, что мне нужно использовать команду «выполнить» из других вопросов, которые я видел здесь, в стеке.

Еще до конечного результата, я сделал эту простую функцию:

CREATE OR REPLACE FUNCTION public.try1() 
RETURNS TABLE(datery timestamp without time zone) 
LANGUAGE plpgsql 
AS $function$ 
declare 
stmt text; 
BEGIN 
     stmt :='SELECT b FROM chks where a=4'; 
      RETURN QUERY 
    execute stmt ; 
END 
$function$ 

В результате этого запроса выбрать форму б CHKS где а = 4:

«выберите сейчас() :: метка времени без часового пояса '

Когда я запускаю функцию, я получаю ошибку при запуске, которая говорит мне, что reutrn of fuction является varchar, а не timestamp, и если я изменю тип возвращаемого значения на varchar, я получаю в результате сам запрос, а не результат запроса.

Что мне здесь не хватает?

В любом случае, существует ли более простой способ сделать это? Я прошу об этом как для моей простой функции, так и для функции с параметром, о котором я упомянул ранее.

+0

ли все сохраненные запросы возвращают одинаковое число столбцов одного и того же типа? –

+0

@Igor - да, они есть. – Balinti

ответ

1

попробовать что-то вроде этого:

CREATE OR REPLACE FUNCTION public.try1(query_number numeric) 
    RETURNS TABLE(datery timestamp without time zone) 
AS $function$ 
DECLARE 
stmt text; 
BEGIN 
    SELECT b INTO stmt 
    FROM chks 
    WHERE a=query_number; 
    RETURN QUERY EXECUTE stmt; 
END 
$function$ 
LANGUAGE plpgsql STRICT; 
Смежные вопросы