From: Shakespeare on
Maxim Demenko schreef:
> ddf wrote:
>> On Sep 16, 2:36 pm, "Michel Cadot" <micadot{at}altern{dot}org> wrote:
>>> "Dan Blum" <t...(a)panix.com> a �crit dans le message de news:
>>> h8rdtj$e6...(a)reader1.panix.com...| Sashi <small...(a)gmail.com> wrote:
>>>
>>> | > HI all, I'm trying to use the collect() function (mentioned in my
>>> | > earlier post in this ng) but it, well, collects all values. Is there
>>> | > any way of avoiding duplicates?
>>> | > What I'm trying to do is this:
>>> |
>>> | > select collect(a1), a2, a3, a4
>>> | > from A
>>> | > group by a2, a3, a4.
>>> |
>>> | select collect(distinct a1)... should work.
>>> |
>>> | --
>>> |
>>> _______________________________________________________________________
>>> | Dan Blum t...(a)panix.com
>>> | "I wouldn't have believed it myself if I hadn't just made it up."
>>>
>>> It does.
>>>
>>> SQL> select collect(val) from t;
>>> COLLECT(VAL)
>>> ---------------------------------------------
>>> SYSTPYmvHKMavRw27KIB3yptjFg==(1, 2, 1, 1)
>>>
>>> 1 row selected.
>>>
>>> SQL> select collect(distinct val) from t;
>>> COLLECT(DISTINCTVAL)
>>> ---------------------------------------------
>>> SYSTPYmvHKMavRw27KIB3yptjFg==(1, 2)
>>>
>>> 1 row selected.
>>>
>>> Regards
>>> Michel
>>
>> But not with a GROUP BY query:
>
> Seems to be fixed in 11gR2 (don't have 11gR1 by hand now)
> For 10gR2 this (in my opinion buggy) behaviour can be workarounded (
> besides using sql types) using an inline view returning distinct set of
> rows
>
> Best regards
>
> Maxim

But you may run out of memory very quickly (have seen this repeatedly in
10g)

Shakespeare
From: ddf on
On Sep 16, 3:32 pm, Maxim Demenko <mdeme...(a)gmail.com> wrote:
> ddf wrote:
> > On Sep 16, 2:36 pm, "Michel Cadot" <micadot{at}altern{dot}org> wrote:
> >> "Dan Blum" <t...(a)panix.com> a écrit dans le message de news: h8rdtj$e6...(a)reader1.panix.com...| Sashi <small...(a)gmail.com> wrote:
>
> >> | > HI all, I'm trying to use the collect() function (mentioned in my
> >> | > earlier post in this ng) but it, well, collects all values. Is there
> >> | > any way of avoiding duplicates?
> >> | > What I'm trying to do is this:
> >> |
> >> | > select collect(a1), a2, a3, a4
> >> | > from A
> >> | > group by a2, a3, a4.
> >> |
> >> | select collect(distinct a1)... should work.
> >> |
> >> | --
> >> | _______________________________________________________________________
> >> | Dan Blum          t...(a)panix.com
> >> | "I wouldn't have believed it myself if I hadn't just made it up."
>
> >> It does.
>
> >> SQL> select collect(val) from t;
> >> COLLECT(VAL)
> >> ---------------------------------------------
> >> SYSTPYmvHKMavRw27KIB3yptjFg==(1, 2, 1, 1)
>
> >> 1 row selected.
>
> >> SQL> select collect(distinct val) from t;
> >> COLLECT(DISTINCTVAL)
> >> ---------------------------------------------
> >> SYSTPYmvHKMavRw27KIB3yptjFg==(1, 2)
>
> >> 1 row selected.
>
> >> Regards
> >> Michel
>
> > But not with a GROUP BY query:
>
> Seems to be fixed in 11gR2 (don't have 11gR1 by hand now)
> For 10gR2 this (in my opinion buggy) behaviour can be workarounded (
> besides using sql types) using an inline view returning distinct set of rows
>
> Best regards
>
> Maxim- Hide quoted text -
>
> - Show quoted text -

I ran this test on 11gR1 so the problem isn't corrected until 11.2.


David Fitzjarrell
From: Sashi on
On Sep 16, 3:36 pm, "Michel Cadot" <micadot{at}altern{dot}org> wrote:
> "Dan Blum" <t...(a)panix.com> a écrit dans le message de news: h8rdtj$e6....(a)reader1.panix.com...| Sashi <small...(a)gmail.com> wrote:
>
> | > HI all, I'm trying to use the collect() function (mentioned in my
> | > earlier post in this ng) but it, well, collects all values. Is there
> | > any way of avoiding duplicates?
> | > What I'm trying to do is this:
> |
> | > select collect(a1), a2, a3, a4
> | > from A
> | > group by a2, a3, a4.
> |
> | select collect(distinct a1)... should work.
> |
> | --
> | _______________________________________________________________________
> | Dan Blum          t...(a)panix.com
> | "I wouldn't have believed it myself if I hadn't just made it up."
>
> It does.
>
> SQL> select collect(val) from t;
> COLLECT(VAL)
> ---------------------------------------------
> SYSTPYmvHKMavRw27KIB3yptjFg==(1, 2, 1, 1)
>
> 1 row selected.
>
> SQL> select collect(distinct val) from t;
> COLLECT(DISTINCTVAL)
> ---------------------------------------------
> SYSTPYmvHKMavRw27KIB3yptjFg==(1, 2)
>
> 1 row selected.
>
> Regards
> Michel

Michel, what version were you using? It doesn't work for me.
----------------------------------------------------------------------------------------------------------------
SQL> create or replace type mytyp as table of integer;
2 /

Type created.

SQL> select set(cast(collect(my_value)))
2 from my_table
3 where rownum<100;
select set(cast(collect(my_value)))
*
ERROR at line 1:
ORA-00905: missing keyword


SQL> exit
Disconnected from Oracle Database 10g Enterprise Edition Release
10.2.0.4.0 - 6bit Production
----------------------------------------------------------------------------------------------------------------

Thanks,
Sashi
From: Michel Cadot on

"Sashi" <smalladi(a)gmail.com> a �crit dans le message de news: 9bb71fb6-8213-470a-b3ae-3f9494695aed(a)y21g2000yqn.googlegroups.com...
On Sep 16, 3:36 pm, "Michel Cadot" <micadot{at}altern{dot}org> wrote:
> "Dan Blum" <t...(a)panix.com> a �crit dans le message de news: h8rdtj$e6...(a)reader1.panix.com...| Sashi <small...(a)gmail.com> wrote:
>
> | > HI all, I'm trying to use the collect() function (mentioned in my
> | > earlier post in this ng) but it, well, collects all values. Is there
> | > any way of avoiding duplicates?
> | > What I'm trying to do is this:
> |
> | > select collect(a1), a2, a3, a4
> | > from A
> | > group by a2, a3, a4.
> |
> | select collect(distinct a1)... should work.
> |
> | --
> | _______________________________________________________________________
> | Dan Blum t...(a)panix.com
> | "I wouldn't have believed it myself if I hadn't just made it up."
>
> It does.
>
> SQL> select collect(val) from t;
> COLLECT(VAL)
> ---------------------------------------------
> SYSTPYmvHKMavRw27KIB3yptjFg==(1, 2, 1, 1)
>
> 1 row selected.
>
> SQL> select collect(distinct val) from t;
> COLLECT(DISTINCTVAL)
> ---------------------------------------------
> SYSTPYmvHKMavRw27KIB3yptjFg==(1, 2)
>
> 1 row selected.
>
> Regards
> Michel

Michel, what version were you using? It doesn't work for me.
----------------------------------------------------------------------------------------------------------------
SQL> create or replace type mytyp as table of integer;
2 /

Type created.

SQL> select set(cast(collect(my_value)))
2 from my_table
3 where rownum<100;
select set(cast(collect(my_value)))
*
ERROR at line 1:
ORA-00905: missing keyword


SQL> exit
Disconnected from Oracle Database 10g Enterprise Edition Release
10.2.0.4.0 - 6bit Production

Thanks,
Sashi

-------------------------------------------------------------------------

You didn't say to what you cast.

Regards
Michel