Два относительно простых варианта - если они удовлетворяют вашим потребностям. Вы действительно не объяснили, что вы ожидаете получить в результате, поэтому - это может или не может быть применимо к вашей ситуации.
В любом случае, здесь вы go:
Первый вариант использует функцию listagg
, которая возвращает объединенную строку (как вы хотели вернуть varchar2
). Недостатком является то, что он не будет работать для результата длиннее 4000 символов, но - в этом случае - вы можете использовать XMLAGG
.
SQL> create or replace function fu_pruebas (par_deptno in number)
2 return varchar2
3 is
4 retval varchar2(200);
5 begin
6 select listagg(ename, ', ') within group (order by ename)
7 into retval
8 from emp
9 where deptno = par_deptno;
10 return retval;
11 end;
12 /
Function created.
SQL> select fu_pruebas(10) result from dual;
RESULT
------------------------------------------------------------------------------
CLARK, KING, MILLER
SQL>
Еще один объединяет различные столбцы в строку; в некоторых случаях вам может понадобиться использовать, например, функции to_char
или to_date
, но, как правило, это работает следующим образом:
SQL> create or replace function fu_pruebas_2 (par_empno in number)
2 return varchar2
3 is
4 retval varchar2(200);
5 begin
6 select ename ||' - '|| job ||' - '|| sal
7 into retval
8 from emp
9 where empno = par_empno;
10 return retval;
11 end;
12 /
Function created.
SQL> select fu_pruebas_2(7654) result from dual;
RESULT
------------------------------------------------------------------------------
MARTIN - SALESMAN - 1250
SQL>