2015-06-20 2 views
0

Я хочу, чтобы выполнить запрос SQL, если условие выполняется, но я получаю следующее сообщение об ошибке:PostgreSQL функция выполнение запроса

ОШИБКИ: отдельный $ цепь незавершенная или вблизи «$ Func $

мой SQL-запрос:

CREATE OR REPLACE FUNCTION myfunc() 
RETURNS TABLE(dateticket date, timeticket time, userid integer, my_all bigint) AS 
    $func$ 
    BEGIN 
      IF (SELECT COUNT(DISTINCT(dateticket)) from tickets) = 1 THEN 
       RETURN QUERY EXECUTE 'select t.* 
       from (select distinct on (userid) dateticket, timeticket, userid, 
       count(*) over (partition by userid) as my_all 
       from tickets t 
       order by userid, dateticket, timeticket) t 
       order by my_all, dateticket, timeticket'; 
      ELSE 
       RETURN QUERY EXECUTE 'select t.* 
       from (select distinct on (userid) dateticket, timeticket, userid, 
       count(*) over (partition by userid) as my_all 
       from tickets t 
       order by userid, dateticket, timeticket) t 
       order by my_all DESC, dateticket DESC, timeticket DESC'; 
      END IF; 
    END; 
    $$ LANGUAGE plpgsql; 
+2

Вы начинаете функцию с $ func $, но пытаетесь ее закончить с помощью $$. Они должны соответствовать –

ответ

1

Ошибка на самом деле не в состоянии или в самой функции, а в синтаксисе создания функции. Вы начинаете определение функции с $func$ и заканчиваете ее $$. Это не будет работать.

Измените $func$ на $$, чтобы исправить синтаксис.

+0

... но SQL-запрос не выполняется. – ivanjj22

+0

@Ivan Это должно быть, когда вы выполняете функцию –

0

У вас есть две неисправностей в функции один уже ответили другое, что колонна ВОЗВРАЩЕННОЙ таблицы является таким же, как имя столбцов в запросе выборки, используемом внутри fucntion это вызовет

ERROR: column reference "dateticket" is ambiguous LINE 1: (SELECT COUNT(DISTINCT(dateticket)) from tickets) = 1 ^DETAIL: It could refer to either a PL/pgSQL variable or a table column. QUERY: (SELECT COUNT(DISTINCT(dateticket)) from tickets) = 1 CONTEXT: PL/pgSQL function myfunc() line 3 at IF ********** Error **********

так вам необходимо изменить свою функцию, как показано ниже:

CREATE OR REPLACE FUNCTION myfunc() 
RETURNS TABLE(datet_icket date, time_ticket time, user_id integer, myall bigint) AS 
    $$ 
BEGIN 
    IF (SELECT COUNT(DISTINCT(dateticket)) from tickets) = 1 THEN 
     RETURN QUERY EXECUTE 'select t.* 
     from (select distinct on (userid) dateticket, timeticket, userid, 
     count(*) over (partition by userid) as my_all 
     from tickets t 
     order by userid, dateticket, timeticket) t 
     order by my_all, dateticket, timeticket'; 
    ELSE 
      RETURN QUERY EXECUTE 'select t.* 
      from (select distinct on (userid) dateticket, timeticket, userid, 
      count(*) over (partition by userid) as my_all 
      from tickets t 
      order by userid, dateticket, timeticket) t 
      order by my_all DESC, dateticket DESC, timeticket DESC'; 
      END IF; 
    END; 
    $$ LANGUAGE plpgsql; 
Смежные вопросы