错了。输出结果应该是nid strname strtransfertation lon
-----------------------------------------------------------------------
1 海淀区 海淀区 上地 菊园 100
2 上地 海淀区 上地 菊园 100
3 菊园 海淀区 上地 菊园 100
-----------------------------------------------------------------------
-----------------------------------------------------------------------
1 海淀区 海淀区 上地 菊园 100
2 上地 海淀区 上地 菊园 100
3 菊园 海淀区 上地 菊园 100
-----------------------------------------------------------------------
参考:
SQL > select job,ename from emp;
JOB ENAME
--------- ----------
CLERK SMITH
SALESMAN ALLEN
SALESMAN WARD
MANAGER JONES
SALESMAN MARTIN
MANAGER BLAKE
MANAGER CLARK
ANALYST SCOTT
PRESIDENT KING
SALESMAN TURNER
CLERK ADAMS
JOB ENAME
--------- ----------
CLERK JAMES
ANALYST FORD
CLERK MILLER
已选择14行。
SQL > create or replace function f_ename(jobno in varchar2)
2 return varchar2 is
3
4 str_return varchar2(200);
5 cursor c_ename(v_jobno varchar2) is select ename from emp where job=v_jobno;
6 begin
7 for str_temp in c_ename(jobno) loop
8 str_return:=str_return | |str_temp.ename;
9 end loop;
10 return str_return;
11 end;
12 /
函数已创建。
SQL > select f_ename(job) from (
2 select distinct job from emp);
F_ENAME(JOB)
---------------------------------------
SCOTT FORD
SMITH ADAMS JAMES MILLER
JONES BLAKE CLARK
KING
ALLEN WARD MARTIN TURNER
SQL >
加上job列:
SQL > select job,f_ename(job) from (
2 select distinct job from emp);
JOB F_ENAME(JOB)
-------------------------------------------------------
ANALYST SCOTT FORD
CLERK SMITH ADAMS JAMES MILLER
MANAGER JONES BLAKE CLARK
PRESIDENT KING
SALESMAN ALLEN WARD MARTIN TURNER
12:54:45 2 return varchar2 is
12:54:45 3 str_return varchar2(200);
12:54:46 4 cursor c_str(v_l number) is select strname from poibaseinfo where lon=v_
12:54:46 5 begin
12:54:46 6 for str_temp in c_str(v_lon) loop
12:54:46 7 str_return:=str_return||' '||str_temp.strname;
12:54:46 8 end loop;
12:54:46 9 return str_return;
12:54:46 10 end f_con_str;
12:54:46 11 /函数已创建。已用时间: 00: 00: 00.47
12:54:46 SQL> select f_con_str(lon) from poibaseinfo;F_CON_STR(LON)
--------------------------------------------------------------------------------
海淀区 上地 菊园
海淀区 上地 菊园
海淀区 上地 菊园
复兴门 天安门
复兴门 天安门已用时间: 00: 00: 00.31
12:54:49 SQL> select * from poibaseinfo; NID STRNAME STRTRANSFERTATION LON
---------- ---------- ------------------------------ ----------
1 海淀区 100
2 上地 100
3 菊园 100
4 复兴门 200
5 天安门 200已用时间: 00: 00: 00.31
seinfo;表已创建。已用时间: 00: 00: 00.12
12:59:53 SQL> select * from t_temp; LON
----------
STRTRANSFERTATION
--------------------------------------------------------------------------------
100
海淀区 上地 菊园 200
复兴门 天安门
已用时间: 00: 00: 00.46
13:00:00 SQL> update poibaseinfo set STRTRANSFERTATION=(select STRTRANSFERTATION
13:00:22 2 from t_temp where t_temp.lon=poibaseinfo.lon);已更新5行。已用时间: 00: 00: 00.15
13:00:38 SQL> select * from poibaseinfo; NID STRNAME STRTRANSFERTATION LON
---------- ---------- ------------------------------ ----------
1 海淀区 海淀区 上地 菊园 100
2 上地 海淀区 上地 菊园 100
3 菊园 海淀区 上地 菊园 100
4 复兴门 复兴门 天安门 200
5 天安门 复兴门 天安门 200已用时间: 00: 00: 00.16
而且你的结果也有问题
凭什么“海淀区”的strtransfertation是“海淀区 上地 菊园”
而“上地”和“菊园”的strtransfertation都没有包括自身内容,
return varchar2 is
v_all_strname varchar2(500):='';
ig1 number;
ig2 number;cursor c_tab_name is select distinct strname from poibaseinfo where lon:=v_lon;
type dept_array is varray(100) of poibaseinfo.strname%type;
depts dept_array;begin
ig1:=0;
depts:=dept_array();
for tab_name in c_tab_name loop
ig1:=ig1+1;
depts.extend();
depts(ig1):=tab_name.strname;
end loop;
for ig2 in 1..ig1 loop
v_all_strname:=v_all_strname+depts(ig2);
/* dbms_output.put_line(v_all_strname); */ ----测一下这儿
execute immediate 'update poibaseinfo set strtransfertation='||v_all_strname||'where lon='||v_lon;
commit;
end loop;
end;
/