câu trả lời phải đã được đưa ra, nhưng chỉ xây dựng một chút.
Mô phỏng tình hình hiện tại của bạn:
SQL> declare
2 cursor cur_t
3 is
4 select ename
5 from emp
6 where deptno = 10
7 ;
8 v_texttoadd emp.ename%type;
9 v_string varchar2(100);
10 begin
11 open cur_t;
12 loop
13 fetch cur_t into v_texttoadd;
14 v_string := v_string || v_texttoadd;
15 exit when cur_t%notfound;
16 end loop
17 ;
18 dbms_output.put_line(v_string);
19 end;
20/
CLARKKINGMILLERMILLER
PL/SQL-procedure is geslaagd.
Đây MILLER được in hai lần. Bởi chỉ cần chuyển đổi báo cáo kết quả EXIT và sự phân công v_string, bạn sẽ có được kết quả mong muốn:
SQL> declare
2 cursor cur_t
3 is
4 select ename
5 from emp
6 where deptno = 10
7 ;
8 v_texttoadd emp.ename%type;
9 v_string varchar2(100);
10 begin
11 open cur_t;
12 loop
13 fetch cur_t into v_texttoadd;
14 exit when cur_t%notfound;
15 v_string := v_string || v_texttoadd;
16 end loop
17 ;
18 dbms_output.put_line(v_string);
19 end;
20/
CLARKKINGMILLER
PL/SQL-procedure is geslaagd.
Tuy nhiên,/code PL SQL của bạn trở nên dễ dàng hơn khi sử dụng một con trỏ-cho-loop. Sau đó, bạn có thể bỏ qua biến v_texttoadd và số dòng trong vòng lặp của bạn giảm:
SQL> declare
2 cursor cur_t
3 is
4 select ename
5 from emp
6 where deptno = 10
7 ;
8 v_string varchar2(100);
9 begin
10 for r in cur_t
11 loop
12 v_string := v_string || r.ename;
13 end loop
14 ;
15 dbms_output.put_line(v_string);
16 end;
17/
CLARKKINGMILLER
PL/SQL-procedure is geslaagd.
Bạn cũng có thể sử dụng SQL thẳng để hoàn thành công việc. Ví dụ với mệnh đề mô hình SQL, nếu bạn đang sử dụng phiên bản 10g hoặc cao hơn:
SQL> select string
2 from (select string
3 , rn
4 from emp
5 where deptno = 10
6 model
7 dimension by (rownum rn)
8 measures (ename, cast(null as varchar2(100)) string)
9 (string[any] order by rn desc = ename[cv()] || string[cv()+1]
10 )
11 )
12 where rn = 1
13/
STRING
-----------------------------------------------------------------------------------
CLARKKINGMILLER
1 rij is geselecteerd.
Kính trọng, Rob.
Nguồn
2009-05-22 06:59:18
Đã không làm việc cho tôi. Hãy xem câu trả lời của tôi nếu bạn quan tâm. –