嗨,当我去面试的时候,他们问我这个问题。
Create table course(Name CHAR(10));
insert into course values ('Java');
insert into course values ('Oracle');
insert into course values ('Python');
insert into course values ('C');
insert into course values ('C++');
o/p:
Java Oracle python c c++提前谢谢你,桑迪亚。
发布于 2020-01-06 09:25:52
我认为NAME列的数据类型应该是VARCHAR2,而不是CHAR。
无论如何,另一个选项(类似于Tejash的LISTAGG)使用XMLAGG,如果结果大于4000个字符,则更安全。
SQL> SELECT RTRIM (
2 XMLAGG (XMLELEMENT (e, name || ' ') ORDER BY null).EXTRACT (
3 '//text()'),
4 ',')
5 result
6 FROM course;
RESULT
------------------------------------------------------------
Java Oracle Python C C++
SQL>或者,当您使用PL/SQL标记标记问题时,匿名PL/SQL块可能如下所示:
SQL> set serveroutput on
SQL>
SQL> declare
2 l_result varchar2(100);
3 begin
4 for cur_r in (select name from course) loop
5 l_result := l_result ||' '|| cur_r.name;
6 end loop;
7
8 dbms_output.put_line(trim(l_result));
9 end;
10 /
Java Oracle Python C C++
PL/SQL procedure successfully completed.
SQL>或者--类似地--一种功能:
SQL> create or replace function f_course
2 return varchar2
3 is
4 l_result varchar2(100);
5 begin
6 for cur_r in (select name from course) loop
7 l_result := l_result ||' '|| cur_r.name;
8 end loop;
9
10 return trim(l_result);
11 end;
12 /
Function created.
SQL> select f_course from dual;
F_COURSE
--------------------------------------------------------------
Java Oracle Python C C++
SQL>或者,带有OUT参数的过程:
SQL> create or replace procedure p_course (par_result out varchar2)
2 is
3 l_result varchar2(100);
4 begin
5 for cur_r in (select name from course) loop
6 l_result := l_result ||' '|| cur_r.name;
7 end loop;
8
9 par_result := trim(l_result);
10 end;
11 /
Procedure created.
SQL> declare
2 l_out varchar2(100);
3 begin
4 p_course(l_out);
5 dbms_output.put_line(l_out);
6 end;
7 /
Java Oracle Python C C++
PL/SQL procedure successfully completed.
SQL>正如您所看到的,有很多选择;使用最适合您需要的选项。
发布于 2020-01-06 06:52:47
您可以使用聚合函数- LISTAGG,如下所示:
SQL>选择组内2个LISTAGG(TRIM(NAME),‘') (3阶乘4 NULL 5)作为结果6;结果C++ SQL>
干杯!!
https://stackoverflow.com/questions/59607761
复制相似问题