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]

 



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_tbl AS $$
>  SELECT tblA.id, tblA.method, tblA.species, tblA.location
>  FROM tblA
>  WHERE method=input_method AND 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 tblA values ('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.
> 
> CREATE FUNCTION print_out(x TEXT, y TEXT) RETURNS void AS $$
>  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

What PostgreSQL version?

SQL functions only recently could refer to input parameters by name.  Before
you had to use $1, $2, etc... To reference them.

David J.






--
View this message in context: http://postgresql.1045698.n5.nabble.com/Add-COPY-statement-inside-sql-function-AND-OR-call-function-within-function-tp5778666p5778683.html
Sent from the PostgreSQL - general mailing list archive at Nabble.com.


-- 
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