From: | Misa Simic <misa(dot)simic(at)gmail(dot)com> |
---|---|
To: | James Sharrett <jsharrett(at)tidemark(dot)net> |
Cc: | "pgsql-sql(at)postgresql(dot)org" <pgsql-sql(at)postgresql(dot)org> |
Subject: | Re: returning the number of rows output by a copy command from a function |
Date: | 2013-01-16 16:55:22 |
Message-ID: | CAH3i69nm14X9O1+765De+9gHNnweNE947XR4kswhKBhowwLwRw@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-sql |
Hi
Maybe:
1.
strSQL := 'copy (select MyColumns from MyExportTable) to MyFile.csv with
CSV HEADER;';
Execute strSQL
strSQL := 'Select count(*) from (select MyColumns from MyExportTable) t';
Execute strSQL into export_count;
Return export_count;
Kind Regards,
Misa
On Wednesday, January 16, 2013, James Sharrett wrote:
> I have a function that generates a table of records and then a SQL
> statement that does a COPY into a text file. I want to return the number
> of records output into the text file from my function. The number of rows
> in the table is not necessarily the number of rows in the file due to
> summarization of data in the table on the way out. Here is a very
> shortened version of what I'm doing:
>
>
> CREATE OR REPLACE FUNCTION export_data(list of parameters)
> RETURNS integer AS
> $BODY$
>
> declare
> My variables
>
> Begin
>
> { A lot of SQL to build and populate the table of records to export}
>
>
> strSQL := 'copy (select MyColumns from MyExportTable) to MyFile.csv with
> CSV HEADER;';
> Execute strSQL;
>
> Return 0;
>
> end
> $BODY$
> LANGUAGE plpgsql VOLATILE
>
> strSQL gets dynamically generated so it's not a static statement.
>
> This all works exactly as I want. But when I try to get the row count
> back out I cannot get it. I've tried the following:
>
> 1.
> strSQL := 'copy (select MyColumns from MyExportTable) to MyFile.csv with
> CSV HEADER;';
> Execute strSQL into export_count;
>
> Return export_count;
>
> This give me an error saying that I've tried to use the INTO statement
> with a command that doesn't return data.
>
>
> 2.
> strSQL := 'copy (select MyColumns from MyExportTable) to MyFile.csv with
> CSV HEADER;';
> Execute strSQL;
>
> Get diagnostics export_count = row_count;
>
> This always returns zero.
>
> 3.
> strSQL := 'copy (select MyColumns from MyExportTable) to MyFile.csv with
> CSV HEADER;';
> Execute strSQL;
>
> Return row_count;
>
> This returns a null.
>
> Any way to do this?
>
>
> Thanks in advance,
> James
>
>
From | Date | Subject | |
---|---|---|---|
Next Message | James Sharrett | 2013-01-16 17:13:41 | Re: returning the number of rows output by a copy command from a function |
Previous Message | Adrian Klaver | 2013-01-16 16:42:43 | Re: returning the number of rows output by a copy command from a function |