Re: stored procedure problem: parameters not properly passed

From: shadowbox <percy(dot)deleon(at)gmail(dot)com>
To: pgsql-novice(at)postgresql(dot)org
Subject: Re: stored procedure problem: parameters not properly passed
Date: 2005-09-29 03:14:51
Message-ID: e699f205050928201451ac8b3e@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-novice

after experimenting on the stored procs, i noticed that i need to wrap
the SQL statements in single quotes (and these single quotes used in
the SQL should be escaped), like so:

CREATE OR REPLACE FUNCTION make_etms_views(start_date date, end_date date)
RETURNS void
AS $$
DECLARE
BEGIN
raise notice 'Start Date: %', start_date;
raise notice 'End Date: %', end_date;

EXECUTE '
CREATE OR REPLACE VIEW hours_worked AS
SELECT id, b.name || \', \' || b.nickname AS resource,
sum(EXTRACT (EPOCH FROM a.hours_actual)/3600) AS hours_worked,
sum(a.hours_actual) as days_worked
FROM t_timesheet a, t_resource b
WHERE activity_id NOT IN
( SELECT id
FROM t_project_activity
WHERE name ILIKE \'%leave\')
AND a.resource_id = b.id
AND a.date_sheet BETWEEN \'' || start_date || '\' AND \'' ||
end_date || '\'
GROUP BY id, resource
ORDER BY resource' ;

RETURN void;

END;
$$
LANGUAGE 'plpgsql';

or are there more ways to do this?

thanks!

On 9/28/05, shadowbox <percy(dot)deleon(at)gmail(dot)com> wrote:
> hi list,
>
> i'm relatively new in creating stored procs and i'm having this problem:
>
> i created a stored proc that creates an aggregated view and it was
> successfully loaded without errors. my problem was, it seems that the
> parameters were not successfully passed to the procedure. anything i
> missed? attached is the stored procedure and the definition of the
> created view:
>
> --- snip ---
> CREATE OR REPLACE FUNCTION
> make_etms_views(start_date date, end_date date)
> RETURNS void
> AS $$
> DECLARE
>
> BEGIN
> raise notice 'Start Date: %', start_date;
> raise notice 'End Date: %', end_date;
> CREATE VIEW hours_worked AS
> SELECT id, b.name || ', ' || b.nickname AS resource,
> sum(EXTRACT (EPOCH FROM a.hours_actual)/3600) AS hours_worked,
> sum(a.hours_actual) as days_worked
> FROM t_timesheet a, t_resource b
> WHERE activity_id NOT IN
> ( SELECT id
> FROM t_project_activity
> WHERE name ILIKE '%leave')
> AND a.resource_id = b.id
> AND a.date_sheet BETWEEN start_date AND end_date
> GROUP BY id, resource
> ORDER BY resource
> ;
> RETURN void;
>
> END;
> $$
> LANGUAGE 'plpgsql';
>
> View definition (you'll notice that the date_sheet params were not not
> properly passed, hence the $1 and $2) :
>
> SELECT b.id, (b.name::text || ', '::text) || b.nickname::text AS
> resource, sum(date_part('epoch'::text, a.hours_actual) / 3600::double
> precision) AS hours_worked, sum(a.hours_actual) AS days_worked
> FROM t_timesheet a, t_resource b
> WHERE NOT (a.activity_id IN ( SELECT t_project_activity.id
> FROM t_project_activity
> WHERE t_project_activity.name::text ~~* '%leave'::text)) AND
> a.resource_id::text = b.id::text AND a.date_sheet >= $1 AND
> a.date_sheet <= $2
> GROUP BY b.id, (b.name::text || ', '::text) || b.nickname::text
> ORDER BY (b.name::text || ', '::text) || b.nickname::text;
> t;
>
>
> i already checked out the docs, but i'm not successful in gettnig
> substantial info on the problem. anyways, any help from you guys will
> be appreciated.
>
> thanks,
>

In response to

Browse pgsql-novice by date

  From Date Subject
Next Message ann hedley 2005-09-29 13:14:41 perl DBI::Pg metacharacter \i com_list.sql
Previous Message Michael Glaesemann 2005-09-28 21:33:10 Re: Timestamps Look Incorrect?