Thread: OT: array_accum equivalent in Oracle
WARNING: The rest of this post is for somebody who has worked with Oracle and has migrated to PG, or for some other reason has good experience with Oracle. I know this is off-topic for this list and should be asked in an Oracle support-forum, but I don't have access to that, and Uncle Google didn't return any obvious results, so here it goes... Anybody knows if Oracle has an equivalent of PG's array_accum or ARRAY(subselect) construct? I need a way to accomplish this in Oracle: select ARRAY(select t.id from table t where t.user_id = u.id) as id_array, .... Any hints on where to look in Oracle-docs are welcome. -- Andreas Joseph Krogh <andreak@officenet.no> Senior Software Developer / Manager ------------------------+---------------------------------------------+ OfficeNet AS | The most difficult thing in the world is to | Karenslyst Allé 11 | know how to do a thing and to watch | PO. Box 529 Skøyen | somebody else doing it wrong, without | 0214 Oslo | comment. | NORWAY | | Tlf: +47 24 15 38 90 | | Fax: +47 24 15 38 91 | | Mobile: +47 909 56 963 | | ------------------------+---------------------------------------------+
On 10/12/07, Andreas Joseph Krogh <andreak@officenet.no> wrote: > Anybody knows if Oracle has an equivalent of PG's array_accum or > ARRAY(subselect) construct? Something like this: CREATE TYPE varchar2_table_t AS TABLE OF VARCHAR2(32767); SELECT job, CAST(MULTISET(SELECT ename FROM emp WHERE job = e.job) AS varchar2_table_t) FROM emp e GROUP BY job; -- Jonah H. Harris, Sr. Software Architect | phone: 732.331.1324 EnterpriseDB Corporation | fax: 732.331.1301 499 Thornall Street, 2nd Floor | jonah.harris@enterprisedb.com Edison, NJ 08837 | http://www.enterprisedb.com/
On Friday 12 October 2007 17:02:23 Jonah H. Harris wrote: > On 10/12/07, Andreas Joseph Krogh <andreak@officenet.no> wrote: > > Anybody knows if Oracle has an equivalent of PG's array_accum or > > ARRAY(subselect) construct? > > Something like this: > > CREATE TYPE varchar2_table_t AS TABLE OF VARCHAR2(32767); > SELECT job, CAST(MULTISET(SELECT ename FROM emp WHERE job = e.job) AS > varchar2_table_t) FROM emp e GROUP BY job; Amazing! Works like a charm. I was envisioning some pretty ugly PL/SQL functions to accomplish this. Thanks! -- Andreas Joseph Krogh <andreak@officenet.no> Senior Software Developer / Manager ------------------------+---------------------------------------------+ OfficeNet AS | The most difficult thing in the world is to | Karenslyst Allé 11 | know how to do a thing and to watch | PO. Box 529 Skøyen | somebody else doing it wrong, without | 0214 Oslo | comment. | NORWAY | | Tlf: +47 24 15 38 90 | | Fax: +47 24 15 38 91 | | Mobile: +47 909 56 963 | | ------------------------+---------------------------------------------+
On 10/12/07, Andreas Joseph Krogh <andreak@officenet.no> wrote: > > Something like this: > > > > CREATE TYPE varchar2_table_t AS TABLE OF VARCHAR2(32767); > > SELECT job, CAST(MULTISET(SELECT ename FROM emp WHERE job = e.job) AS > > varchar2_table_t) FROM emp e GROUP BY job; > > Amazing! Works like a charm. > I was envisioning some pretty ugly PL/SQL functions to accomplish this. > > Thanks! No problem. -- Jonah H. Harris, Sr. Software Architect | phone: 732.331.1324 EnterpriseDB Corporation | fax: 732.331.1301 499 Thornall Street, 2nd Floor | jonah.harris@enterprisedb.com Edison, NJ 08837 | http://www.enterprisedb.com/