PostgreSQL Help
 
Forums: » Register « |  User CP |  Games |  Calendar |  Members |  FAQs |  Sitemap |  Support | 
User Name:
Password:
Remember me

The Shed is going Social! Join us on FaceBook and Twitter and chime in on the conversation.

Go Back   Dev Shed ForumsDatabasesPostgreSQL Help

Reply
Add This Thread To:
  Del.icio.us   Digg   Google   Spurl   Blink   Furl   Simpy   Y! MyWeb 
Thread Tools Search this Thread Rate Thread Display Modes
 
Unread Dev Shed Forums Sponsor:
  #1  
Old January 26th, 2013, 10:51 AM
alphak01 alphak01 is offline
Registered User
Dev Shed Newbie (0 - 499 posts)
 
Join Date: Jan 2013
Posts: 8 alphak01 User rank is Just a Lowly Private (1 - 20 Reputation Level) 
Time spent in forums: 2 h 11 m 41 sec
Reputation Power: 0
Error in PL/pgSQL function

Hello, I have an error in the function below,
I am not able to solve,
should probably be in quotes

Code:
CREATE OR REPLACE FUNCTION formula_cont_nv2(mesi integer, mesf integer, anoi integer, anof integer)
  RETURNS text AS
$BODY$
DECLARE
sqlbusca text := '';
contabilizacoes record;

BEGIN
sqlbusca :=  'WITH v_entradas
			AS (
				SELECT date_trunc(month, ent_data) mes
					,sum(ent_valor) soma
				FROM entradas
				WHERE extract(year FROM ent_data) = extract(year FROM now())
				GROUP BY 1
				)
				,v_saidas
			AS (
				SELECT date_trunc(month, sai_data) mes
					,sum(sai_valor) soma
				FROM saidas
				WHERE extract(year FROM sai_data) = extract(year FROM now())
				GROUP BY 1
				)
			SELECT extract(year FROM gs.mes)::NUMERIC ano
					,extract(month FROM gs.mes)::NUMERIC mes
					,round(coalesce(e.soma, 0), 2) entrada
					,round(coalesce(s.soma, 0), 2) saida
					,round(coalesce(e.soma, 0) - coalesce(s.soma, 0), 2) saldo
					,round(coalesce((100 * s.soma) / e.soma, 0), 2) percentual
			FROM v_entradas e
			INNER JOIN v_saidas s ON e.mes = s.mes
			RIGHT JOIN generate_series('||'2013-01-01'||'::DATE, '||'2013-12-01'||'::DATE, '||'1 month'||') gs(mes) ON gs.mes = e.mes';
      for contabilizacoes in EXECUTE(sqlbusca)loop
	EXECUTE 'DELETE FROM CONTABILIZACOES';
	
	EXECUTE 'INSERT INTO contabilizacoes (con_mes,con_ano) values ('||contabilizacoes.mes||','||contabilizacoes.ano||')';
      end loop;


	RETURN 'OK';
END
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;


Code:
select formula_cont_nv2(1,2,2013,2013)


Code:
ERROR: syntax error at or near "month"
LINE 25: ...rate_series(2013-01-01::DATE, 2013-12-01::DATE, 1 month) gs(...
                                                              ^
QUERY:  WITH v_entradas

Reply With Quote
  #2  
Old January 26th, 2013, 12:30 PM
Jacques1's Avatar
Jacques1 Jacques1 is online now
pollyanna
Click here for more information.
 
Join Date: Jul 2012
Location: Germany
Posts: 1,877 Jacques1 User rank is Lieutenant General (80000 - 90000 Reputation Level)Jacques1 User rank is Lieutenant General (80000 - 90000 Reputation Level)Jacques1 User rank is Lieutenant General (80000 - 90000 Reputation Level)Jacques1 User rank is Lieutenant General (80000 - 90000 Reputation Level)Jacques1 User rank is Lieutenant General (80000 - 90000 Reputation Level)Jacques1 User rank is Lieutenant General (80000 - 90000 Reputation Level)Jacques1 User rank is Lieutenant General (80000 - 90000 Reputation Level)Jacques1 User rank is Lieutenant General (80000 - 90000 Reputation Level)Jacques1 User rank is Lieutenant General (80000 - 90000 Reputation Level)Jacques1 User rank is Lieutenant General (80000 - 90000 Reputation Level)Jacques1 User rank is Lieutenant General (80000 - 90000 Reputation Level)Jacques1 User rank is Lieutenant General (80000 - 90000 Reputation Level)Jacques1 User rank is Lieutenant General (80000 - 90000 Reputation Level)Jacques1 User rank is Lieutenant General (80000 - 90000 Reputation Level)Jacques1 User rank is Lieutenant General (80000 - 90000 Reputation Level) 
Time spent in forums: 1 Month 2 Weeks 2 Days 5 h 32 m
Reputation Power: 813
Hi,

there is no
Code:
1 month

in PostgreSQL. I guess you meant
Code:
interval '1 month'

Reply With Quote
  #3  
Old January 26th, 2013, 04:26 PM
alphak01 alphak01 is offline
Registered User
Dev Shed Newbie (0 - 499 posts)
 
Join Date: Jan 2013
Posts: 8 alphak01 User rank is Just a Lowly Private (1 - 20 Reputation Level) 
Time spent in forums: 2 h 11 m 41 sec
Reputation Power: 0
Hi
I added the following line:
Code:
interval '1 month'


But still giving error:
Code:
ERROR: syntax error at or near "1"
LINE 25: ...ries (2013-1-01::date,2013-12-01::date + interval 1 month) g...


Function with changes:

Code:
CREATE OR REPLACE FUNCTION formula_cont_nv2(mesi integer, mesf integer, anoi integer, anof integer)
  RETURNS text AS
$BODY$
DECLARE
sqlbusca text := '';
contabilizacoes record;

BEGIN
sqlbusca := 'WITH v_entradas
			AS (
				SELECT date_trunc(month, ent_data) mes
					,sum(ent_valor) soma
				FROM entradas
				WHERE extract(year FROM ent_data) = extract(year FROM now())
				GROUP BY 1
				)
				,v_saidas
			AS (
				SELECT date_trunc(month, sai_data) mes
				,sum(sai_valor) soma
				FROM saidas
				WHERE extract(year FROM sai_data) = extract(year FROM now())
				GROUP BY 1
				)
			SELECT extract(year FROM gs.mes)::NUMERIC ano
					,extract(month FROM gs.mes)::NUMERIC mes
					,round(coalesce(e.soma, 0), 2) entrada
					,round(coalesce(s.soma, 0), 2) saida
					,round(coalesce(e.soma, 0) - coalesce(s.soma, 0), 2) saldo
					,round(coalesce((100 * s.soma) / e.soma, 0), 2) percentual
			FROM v_entradas e
			INNER JOIN v_saidas s ON e.mes = s.mes
			RIGHT OUTER JOIN generate_series ('||'2013-1-01'||'::date,'||'2013-12-01'||'::date + interval '||'1'||' month'||') gs(mes) on gs.mes = e.mes';
      for contabilizacoes in EXECUTE(sqlbusca)loop
	EXECUTE 'DELETE FROM CONTABILIZACOES';
	
	EXECUTE 'INSERT INTO contabilizacoes (con_mes,con_ano) values ('||contabilizacoes.mes||','||contabilizacoes.ano||')';
      end loop;


	RETURN 'OK';
END
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;


Thanks For Attention

Reply With Quote
  #4  
Old January 26th, 2013, 05:04 PM
shammat shammat is offline
Contributing User
Dev Shed Frequenter (2500 - 2999 posts)
 
Join Date: Oct 2003
Location: Germany
Posts: 2,685 shammat User rank is Captain (20000 - 30000 Reputation Level)shammat User rank is Captain (20000 - 30000 Reputation Level)shammat User rank is Captain (20000 - 30000 Reputation Level)shammat User rank is Captain (20000 - 30000 Reputation Level)shammat User rank is Captain (20000 - 30000 Reputation Level)shammat User rank is Captain (20000 - 30000 Reputation Level)shammat User rank is Captain (20000 - 30000 Reputation Level)shammat User rank is Captain (20000 - 30000 Reputation Level)shammat User rank is Captain (20000 - 30000 Reputation Level) 
Time spent in forums: 1 Month 3 Weeks 3 Days 19 h 57 m 3 sec
Reputation Power: 284
It's not interval 1 month

It's either:
Code:
interval '1 month'
or
Code:
interval '1' month
Note the single quotes.
__________________
I will not read nor answer questions where the SQL code is messy and not formatted properly using [code] tags.
http://forums.devshed.com/misc.php?do=bbcode#code

Tips on how to ask better questions:
http://tkyte.blogspot.de/2005/06/how-to-ask-questions.html
http://wiki.postgresql.org/wiki/SlowQueryQuestions
http://catb.org/esr/faqs/smart-questions.html

Reply With Quote
  #5  
Old January 26th, 2013, 05:53 PM
alphak01 alphak01 is offline
Registered User
Dev Shed Newbie (0 - 499 posts)
 
Join Date: Jan 2013
Posts: 8 alphak01 User rank is Just a Lowly Private (1 - 20 Reputation Level) 
Time spent in forums: 2 h 11 m 41 sec
Reputation Power: 0
My problem is this line:
Code:
RIGHT OUTER JOIN generate_series ('||'2013-1-01'||'::date,'||'2013-12-01'||'::date + interval '||'1'||' month'||') gs(mes) on gs.mes = e.mes';

I am not able to solve the error of single quotes.

Reply With Quote
Reply

Viewing: Dev Shed ForumsDatabasesPostgreSQL Help > Error in PL/pgSQL function

Developer Shed Advertisers and Affiliates



Thread Tools  Search this Thread 
Search this Thread:

Advanced Search
Display Modes  Rate This Thread 
Rate This Thread:


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
View Your Warnings | New Posts | Latest News | Latest Threads | Shoutbox
Forum Jump

Forums: » Register « |  User CP |  Games |  Calendar |  Members |  FAQs |  Sitemap |  Support | 
  
 


Powered by: vBulletin Version 3.0.5
Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.

© 2003-2013 by Developer Shed. All rights reserved. DS Cluster - Follow our Sitemap