在pl/sql中将列数据转换为行
嗨,当我去面试时,他们问了我这个问题在pl/sql中将列数据转换为行,sql,oracle,plsql,Sql,Oracle,Plsql,嗨,当我去面试时,他们问了我这个问题 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
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++
提前感谢,,
Sandhya.您可以使用聚合函数-
listag
,如下所示:
干杯 我假定
NAME
列的数据类型应该是VARCHAR2
,而不是CHAR
无论如何,另一个选项(类似于Tejash的listag
)使用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>
如你所见,有很多选择;使用最适合您需要的工具。您好,sandhya,在这里,像您这样的用户可以在询问我们之前尝试自己搜索。请阅读本页以改进您的问题:
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>