I can't believe myself. It always comes down to some missing semicolon.
Thanks for your help. I am embarrassed.

On Thu, Sep 4, 2008 at 12:49 PM, Fernando Hevia <[EMAIL PROTECTED]>wrote:

> You seem to be missing a ';' in this line:
>
>        v_from := c_from ;
>        v_where := p_where            <--- missing ; here
>         v_stmt := c_select || v_from || v_where;
>
> Regards,
> Fernando
>
>
>
> ________________________________
>
>        De: [EMAIL PROTECTED]
> [mailto:[EMAIL PROTECTED] En nombre de Ruben Gouveia
>        Enviado el: Jueves, 04 de Septiembre de 2008 16:37
>        Para: pgsql-sql@postgresql.org
>        Asunto: [SQL] Syntax help please
>
>
>        I can't for the life of me figure out what's wrong with this syntax.
> I get the following error when i try and create this function.
>
>        ERROR:  syntax error at or near "$2" at character 15
>        QUERY:  SELECT   $1   $2  :=  $3  ||  $4  ||  $5
>        CONTEXT:  SQL statement in PL/PgSQL function "fcn_gen_statement"
> near line 24
>
>        here's what i am trying to create:
>
>        CREATE OR REPLACE FUNCTION fcn_gen_statement(p_type varchar,
>                                                     p_where varchar,
>                                                     p_newonly numeric)
>        RETURNS varchar AS $$
>
>        DECLARE
>            c_select varchar(64) := 'select count(distinct m.id) ';
>            c_from varchar(64) := 'from job m ';
>            c_newonly_from varchar(128) := 'from (select id,
> min(date_created) as date_created '||
>                                                 'from hr '||
>                                                 'group_by id) m ';
>            v_from varchar(512);
>            v_where varchar(512);
>            v_stmt varchar(2048);
>
>        BEGIN
>            if p_newonly = 1 then
>                v_from := c_newonly_from;
>            else
>                v_from := c_from;
>            end if;
>
>            if upper(p_type) = 'NEW' then
>                v_stmt := c_select || v_from || p_where;
>            elsif upper(p_type) = 'OLD' then
>                v_from := c_from ;
>                v_where := p_where
>                v_stmt := c_select || v_from || v_where;
>              elsif upper(p_type) = 'LAST_JOB' then
>                v_from := v_from ||
>                    ', (select distinct job_id ' ||
>                    'from job_log' ||
>                    'where status = 10) d ';
>                v_where := p_where ||
>                    'and m.id = d.job_id ';
>                v_stmt := c_select || v_from || v_where;
>            elsif upper(p_type) = 'NEW_JOB' then
>                v_from := v_from ||
>                    ', (select distinct job_id ' ||
>                    'from job_log' ||
>                    'where status = 12) d ';
>                v_where := p_where ||
>                    'and m.id = d.job_id ';
>                v_stmt := c_select || v_from || v_where;
>
>            end if;
>            return (v_stmt);
>        END;
>        $$ LANGUAGE plpgsql;
>
>
>
>
>
>

Reply via email to