Search Postgresql Archives

Re: Add COPY statement inside sql function AND/OR call function within function

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 11/12/2013 12:56 PM, Johannes Björk wrote:
Hi, Im hoping someone could help me with this. I am new to any kind of
sql coding so bare with me.

I have written the below working function which I would like to print to
.csv file(s)

|CREATE  FUNCTION  retrieve_info(input_method TEXT,  input_species TEXT)  RETURNS SETOF
retrieve_info_tblAS  $$
  SELECT  tblA.id,  tblA.method,  tblA.species,  tblA.location
  FROM  tblA
  WHERE  method=input_methodAND  species=input_species
  GROUP  BY  id,  method,  species
  ORDER  BY  location
$$  LANGUAGE'sql';|


*DUMMY DATA*

tblA (filled)

|create  table  tblA(id varchar(5)  PRIMARY  KEY,  method text,  species varchar(10),  location
text);
insert  into  tblAvalues  ('1a',  'mtd1',  'sp1',  'locA'),('1b',  'mtd1',  'sp2',  'locC'),('1c',
'mtd2',  'sp3',  'locB'),('1d',  'mtd1',  'sp1',  'locB'),('1e',  'mtd2',  'sp5',  'locA');|

retrieve_info_tbl (empty)

|create  table  retrieve_info_tbl(id varchar(5)  PRIMARY  KEY,  method text,  ind varchar(10),
location text);|

Calling function

|SELECT  *  FROM  retrieve_info('mtd1','sp1');|

*OUTPUT*

|retrieve_info(mtd1,  sp3)

id|  method|  ind|  location
----------------------------
1a|  mtd1|  sp3|  locA
1d|  mtd1|  sp3|  locB|


Since I have not succeeded in this, I tried to work around it creating a
function which called this function and printed the result to a .csv file.

It looks like it is succeeding, it returns a setof. What are you looking to do?


|CREATE  FUNCTION  print_out(x TEXT,  y TEXT)  RETURNS voidAS  $$
  COPY(SELECT  *  FROM  retrieve_info(x,y))  TO  'myfilepath/test.csv'
  WITH  CSV HEADER;
$$  LANGUAGE'sql';|

Calling nested function.

|SELECT  *  FROM  print_out('mtd1','sp1');|

|

*OUTPUT*

The above gives this |ERROR: column "x" does not exist SQL state: 42703
Context: SQL function "print_out" statement 1|. However, when
substituting x,y in print_out() with 'mtd1','sp1' the correct output is
printed to test.csv

I would really appreciate any pointers on either one of the above problems.



Many thanks,

Johannes

|


--
Adrian Klaver
adrian.klaver@xxxxxxxxx


--
Sent via pgsql-general mailing list (pgsql-general@xxxxxxxxxxxxxx)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux