Thread: Return data from function
Hello, I need to create a function that find data over 3 tables, merge and return data. With example can be specified more clearly: 1.1 Find all addresses code; 1.2 For each addresses code, get address, complement and city on the first table; 1.3 For each addresses code, get address, complement and city on the second table; 1.4 Merge result from first and second tables and return to the function; I would like to do not using cursor. Do you have any ideas how to implement? Thanks in advance.
The magic you're looking for is UNION ALL. You could just union the two address tables together and join that to the address code table, but that'll probably lead to an inefficient plan. You'll likely need to join the address code table to each address table separately, and then UNION ALL those together. On Tue, Apr 17, 2007 at 04:17:36PM -0300, Alexander B. wrote: > Hello, > > I need to create a function that find data over 3 tables, merge and > return data. > With example can be specified more clearly: > > 1.1 Find all addresses code; > 1.2 For each addresses code, get address, complement and city on the > first table; > 1.3 For each addresses code, get address, complement and city on the > second table; > 1.4 Merge result from first and second tables and return to the function; > > I would like to do not using cursor. > Do you have any ideas how to implement? > > Thanks in advance. > > ---------------------------(end of broadcast)--------------------------- > TIP 6: explain analyze is your friend > -- Jim Nasby jim@nasby.net EnterpriseDB http://enterprisedb.com 512.569.9461 (cell)
On Tuesday 17 April 2007 15:17, Alexander B. wrote: > Hello, > > I need to create a function that find data over 3 tables, merge and > return data. > With example can be specified more clearly: > > 1.1 Find all addresses code; > 1.2 For each addresses code, get address, complement and city on the > first table; > 1.3 For each addresses code, get address, complement and city on the > second table; > 1.4 Merge result from first and second tables and return to the function; > > I would like to do not using cursor. > Do you have any ideas how to implement? > I'm not convinced you can't do this from plain sql, but if you're sure a function is the way to go, see the docs on set returning functions: http://www.postgresql.org/docs/current/static/xfunc-sql.html#XFUNC-SQL-TABLE-FUNCTIONS -- Robert Treat Database Architect http://www.omniti.com/