Обсуждение: Issue with a variable in a function

Поиск
Список
Период
Сортировка

Issue with a variable in a function

От
tlund79
Дата:
I've created a function which purpose is to import data to an excel report.
This is however the first time I'm doing this, and I've exhausted all other
options before asking the question here.

I call this function with this command: select ppr_data(2011,1,52,8)

The issue relates to the variable "prosjektkode" ($4). When this is a
singular digit the function runs as expected and the data appears correctly
in the report. The issue appears when "prosjektkode" is multiple digits,
i.e. 8,3,119 (i.e. I want run a report on multiple "prosjektkode"), when I
do this it fails. I've tried to declare this variable as text and tried
escaping the commas, but no luck.

The function:

CREATE OR REPLACE FUNCTION ppr_data(aarstall int, frauke int, tiluke int,
prosjektkode int) RETURNS int AS $$
DECLARE 
antall bigint;

BEGIN

--Henter Inngang Antall Kunder
select count(distinct a.kundenr) into antall

from aktivitet a
inner join utgave u on u.utgaveid=a.utgaveid
inner join prosjekt p on p.prosjektkode=u.prosjektkode

where a.utfort=1
and a.aktivtypekode in (82,83)
and extract(year from a.utforesdato) = $1 -- Aarstall
and extract(week from a.utforesdato) >= $2 -- Fra_uke
and extract(week from a.utforesdato) <= $3 -- Til_uke
and p.prosjektkode in ($4)


and a.kundenr in (

select o.kundenr

from ordrer o
inner join utgave u on u.utgaveid=o.utgaveid
inner join prosjekt p on p.prosjektkode=u.prosjektkode


where o.ordretypenr in (1, 3, 4, 5) /* utelater ordretypen kredittordre */
and o.kreditert is null /* utelater krediterte ordre */
and o.ordrestatus in (3, 4) /* kun ordrer med status fakturert og klar til
fakturert */
and o.ordresum > 0 /* Utelater 0-ordre og f.eks. messeeksemplar */
and extract(year from o.ordredato) = ($1 - 1)
and p.prosjektkode in ($4)
);

RETURN antall;
END;
$$ LANGUAGE plpgsql;


--
View this message in context:
http://postgresql.1045698.n5.nabble.com/Issue-with-a-variable-in-a-function-tp4974235p4974235.html
Sent from the PostgreSQL - sql mailing list archive at Nabble.com.


Re: Issue with a variable in a function

От
"David Johnston"
Дата:
-----Original Message-----
From: pgsql-sql-owner@postgresql.org [mailto:pgsql-sql-owner@postgresql.org]
On Behalf Of tlund79
Sent: Tuesday, November 08, 2011 8:17 AM
To: pgsql-sql@postgresql.org
Subject: [SQL] Issue with a variable in a function


The issue relates to the variable "prosjektkode" ($4). 

CREATE OR REPLACE FUNCTION ppr_data(aarstall int, frauke int, tiluke int,
prosjektkode int) RETURNS int AS $$ DECLARE antall bigint;

-----------/Original Message----------

Read about "ARRAY"s

Change your function signature to something like:

CREATE OR REPLACE FUNCTION ppr_data(aarstall int, frauke int, tiluke int,
prosjektkode int[] )  -- Note the change to int[] from int for prosjektkode

David J.




Re: Issue with a variable in a function

От
tlund79
Дата:
<div class="WordSection1"><p class="MsoPlainText">Thank you for your reply.<p class="MsoPlainText"> <p
class="MsoPlainText">I'vetried that and the function runs OK, my issue then is maybe selecting the function? I've tried
bothselect ppr_pf_inn_antall(2011,1,52,[8,3]) and select ppr_pf_inn_antall(2011,1,52,{8,3}) but none of them runs. I've
readup about arrays and functions, but guess I'm missing the "functions for dummies" tutorial. :)<p
class="MsoPlainText"> <pclass="MsoPlainText">Please note that since posting this I've have changed some details such as
namingetc.<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"> </span><pclass="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"> </span><pclass="MsoNormal"><b><span
lang="EN-US"style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span lang="EN-US"
style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">David Johnston [via PostgreSQL] [mailto:<a
href="/user/SendEmail.jtp?type=node&node=4977097&i=0"link="external" rel="nofollow" target="_top">[hidden
email]</a>]<br /><b>Sent:</b> 8. november 2011 18:28<br /><b>To:</b> Lund, Thomas<br /><b>Subject:</b> Re: Issue with a
variablein a function</span><p class="MsoNormal"> <p class="MsoNormal" style="margin-bottom:12.0pt">-----Original
Message-----<br />From: <a href="/user/SendEmail.jtp?type=node&node=4975030&i=0" link="external" rel="nofollow"
target="_top">[hiddenemail]</a> [mailto:<a href="/user/SendEmail.jtp?type=node&node=4975030&i=1"
link="external"rel="nofollow" target="_top">[hidden email]</a>] <br />On Behalf Of tlund79 <br />Sent: Tuesday,
November08, 2011 8:17 AM <br />To: <a href="/user/SendEmail.jtp?type=node&node=4975030&i=2" link="external"
rel="nofollow"target="_top">[hidden email]</a><br />Subject: [SQL] Issue with a variable in a function <br /><br /><br
/>Theissue relates to the variable "prosjektkode" ($4). <br /><br />CREATE OR REPLACE FUNCTION ppr_data(aarstall int,
fraukeint, tiluke int, <br />prosjektkode int) RETURNS int AS $$ DECLARE antall bigint; <br /><br
/>-----------/OriginalMessage---------- <br /><br />Read about "ARRAY"s <br /><br />Change your function signature to
somethinglike: <br /><br />CREATE OR REPLACE FUNCTION ppr_data(aarstall int, frauke int, tiluke int, <br />prosjektkode
int[])  -- Note the change to int[] from int for prosjektkode <br /><br />David J. <br /><br /><br /><br />-- <br
/>Sentvia pgsql-sql mailing list (<a href="/user/SendEmail.jtp?type=node&node=4975030&i=3" link="external"
rel="nofollow"target="_top">[hidden email]</a>) <br />To make changes to your subscription: <br /><a href=""
link="external"rel="nofollow" target="_top">click here</a>.<br /><a
href="http://postgresql.1045698.n5.nabble.com/template/NamlServlet.jtp?macro=macro_viewer&id=instant_html%21nabble%3Aemail.naml&base=nabble.naml.namespaces.BasicNamespace-nabble.view.web.template.NabbleNamespace-nabble.view.web.template.InstantMailNamespace&breadcrumbs=instant+emails%21nabble%3Aemail.naml-instant_emails%21nabble%3Aemail.naml-send_instant_email%21nabble%3Aemail.naml"
link="external"rel="nofollow" target="_top">See how NAML generates this email</a></div><br /><hr align="left"
width="300"/> View this message in context: <a
href="http://postgresql.1045698.n5.nabble.com/Issue-with-a-variable-in-a-function-tp4974235p4977097.html">RE:Issue with
avariable in a function</a><br /> Sent from the <a
href="http://postgresql.1045698.n5.nabble.com/PostgreSQL-sql-f2142323.html">PostgreSQL- sql mailing list archive</a> at
Nabble.com.<br/> 

Re: Issue with a variable in a function

От
tlund79
Дата:
I solved this one by trial and error. You were right I needed brackets to
indicate an array, but also needed to replace "in ($4)" with "= any ($4)"

--
View this message in context:
http://postgresql.1045698.n5.nabble.com/Issue-with-a-variable-in-a-function-tp4974235p4977361.html
Sent from the PostgreSQL - sql mailing list archive at Nabble.com.