how to for loop with distinct values?

Started by J.V.almost 14 years ago4 messagesgeneral
Jump to latest
#1J.V.
jvsrvcs@gmail.com

*
I am banging my head over this. I want to select distinct values from a
varchar column and iterate through the values.
*
*I want to select the distinct values from this column and loop through
them (using as a variable) in a raise notice statement and also in an
update statement.

I have not been able to do this trying dozens of different approaches.
I could not find an example even after searching google. **

So for example, suppose table: mytable has a column "value" that is
defined as a varchar:

**
for tmp_var in select distinct(value) from mytable where
value2='literal'
loop
raise notice 'I want to print a message here - the tmp_var is
[' || tmp_var || ']'; <== error on this line
update table set somecolumn = ''' || tmp_var || '''
end loop;

I want to use each distinct value in a "raise notice" line and an update
statement. **

tmp_var has to be in ' ' ticks or will not work. it is failing on the
first FOR statement stating: "invalid input syntax for integer:
"some_distinct_value".

How do I select varchar distinct values and iterate using variables in a
raise notice statement and inside another update statement? **

this seems simple to do , but have not found a way. **
*
*
*

#2Merlin Moncure
mmoncure@gmail.com
In reply to: J.V. (#1)
Re: how to for loop with distinct values?

On Mon, May 21, 2012 at 3:39 PM, J.V. <jvsrvcs@gmail.com> wrote:

I am banging my head over this. I want to select distinct values from a
varchar column and iterate through the values.

I want to select the distinct values from this column and loop through

them

(using as a variable) in a raise notice statement and also in an update
statement.

I have not been able to do this trying dozens of different approaches. I
could not find an example even after searching google.

So for example, suppose table: mytable has a column "value" that is

defined

as a varchar:

for tmp_var in select distinct(value) from mytable where
value2='literal'
loop
raise notice 'I want to print a message here - the tmp_var is ['

||

tmp_var || ']'; <== error on this line
update table set somecolumn = ''' || tmp_var || '''
end loop;

I want to use each distinct value in a "raise notice" line and an update
statement.

tmp_var has to be in ' ' ticks or will not work. it is failing on the
first FOR statement stating: "invalid input syntax for integer:
"some_distinct_value".

How do I select varchar distinct values and iterate using variables in a
raise notice statement and inside another update statement?

this seems simple to do , but have not found a way.

Well it looks like you have a couple of problems here. First, when you
'raise notice', generally you do it like this:
raise notice 'value of var is %', var;

And not do string concatenation. As for the update statement, you should
be quoting tmp_var. At most you should be casting (tmp_var::int) and then
be diagnosing why you have non integer data in a value you are trying to
put into a integer column (which is the point of the insert). So, you are
very close -- it all comes down to how you are handling the NOTICE i think.
A quick review of the examples here:
http://www.postgresql.org/docs/9.2/static/plpgsql-errors-and-messages.html
might
be helpful.

merlin

#3Dmitriy Igrishin
dmitigr@gmail.com
In reply to: Merlin Moncure (#2)
Re: how to for loop with distinct values?

2012/5/22 Merlin Moncure <mmoncure@gmail.com>

On Mon, May 21, 2012 at 3:39 PM, J.V. <jvsrvcs@gmail.com> wrote:

I am banging my head over this. I want to select distinct values from a
varchar column and iterate through the values.

I want to select the distinct values from this column and loop through

them

(using as a variable) in a raise notice statement and also in an update
statement.

I have not been able to do this trying dozens of different approaches. I
could not find an example even after searching google.

So for example, suppose table: mytable has a column "value" that is

defined

as a varchar:

for tmp_var in select distinct(value) from mytable where
value2='literal'
loop
raise notice 'I want to print a message here - the tmp_var is ['

||

tmp_var || ']'; <== error on this line
update table set somecolumn = ''' || tmp_var || '''
end loop;

I want to use each distinct value in a "raise notice" line and an update
statement.

tmp_var has to be in ' ' ticks or will not work. it is failing on the
first FOR statement stating: "invalid input syntax for integer:
"some_distinct_value".

How do I select varchar distinct values and iterate using variables in a
raise notice statement and inside another update statement?

this seems simple to do , but have not found a way.

Well it looks like you have a couple of problems here. First, when you
'raise notice', generally you do it like this:
raise notice 'value of var is %', var;

And not do string concatenation. As for the update statement, you should
be quoting tmp_var. At most you should be casting (tmp_var::int) and then
be diagnosing why you have non integer data in a value you are trying to
put into a integer column (which is the point of the insert). So, you are
very close -- it all comes down to how you are handling the NOTICE i think.
A quick review of the examples here:
http://www.postgresql.org/docs/9.2/static/plpgsql-errors-and-messages.html
might be helpful.

merlin

Nice color and font ;-)

--
// Dmitriy.

#4Merlin Moncure
mmoncure@gmail.com
In reply to: Dmitriy Igrishin (#3)
Re: how to for loop with distinct values?

On Tue, May 22, 2012 at 6:03 AM, Dmitriy Igrishin <dmitigr@gmail.com> wrote:

Nice color and font ;-)

yup -- html formatted emails that I find displeasing get an automatic
response in 'ms comic sans' :-D.

merlin