表A a(代码) b c 123、456 湖北 仙桃 表B a(代码) b(姓名) 123 张三 456 李四求一查询语句将表A中的a字段的代码替换成对应的B表中的姓名(显示结果如下)。张三、李四 湖北 仙桃
如果 表A 只有一个人员 update 表A set a(代码)= (select b(姓名) from 表B where 表B.a(代码)=表A.a(代码))如果 表A 有多人员。就要写一个函数getName 来返回 姓名列表 然后用 update 表A set a(代码)=getName (表A.a(代码)) 。CREATE OR REPLACE FUNCTION getName (CID IN VARCHAR2) RETURN VARCHAR2 IS RESULT VARCHAR2(2000); TYPE NAMETAB IS TABLE OF 表B.b(姓名)%TYPE; NAME1 NAMETAB; CURSOR GETSINGERNAME IS SELECT b(姓名) FROM 表B WHERE '%,'||CID|| ',%' LIKE '%,'||表B.a(代码)|| ',%' ; BEGIN OPEN GETSINGERNAME; FETCH GETSINGERNAME BULK COLLECT INTO NAME1; CLOSE GETSINGERNAME; FOR I IN 1..NAME1.COUNT LOOP RESULT := RESULT || NAME1(I)||','; END LOOP; RESULT := SUBSTR(RESULT,1,LENGTH(RESULT)-1); RETURN(RESULT); END; /
a(代码) b c
123、456 湖北 仙桃
表B
a(代码) b(姓名)
123 张三
456 李四求一查询语句将表A中的a字段的代码替换成对应的B表中的姓名(显示结果如下)。张三、李四 湖北 仙桃
update 表A set a(代码)= (select b(姓名) from 表B where 表B.a(代码)=表A.a(代码))如果 表A 有多人员。就要写一个函数getName 来返回 姓名列表
然后用 update 表A set a(代码)=getName (表A.a(代码))
。CREATE OR REPLACE FUNCTION getName (CID IN VARCHAR2) RETURN VARCHAR2
IS
RESULT VARCHAR2(2000);
TYPE NAMETAB IS TABLE OF 表B.b(姓名)%TYPE;
NAME1 NAMETAB;
CURSOR GETSINGERNAME IS
SELECT b(姓名) FROM 表B
WHERE '%,'||CID|| ',%' LIKE '%,'||表B.a(代码)|| ',%'
;
BEGIN
OPEN GETSINGERNAME;
FETCH GETSINGERNAME BULK COLLECT INTO NAME1;
CLOSE GETSINGERNAME;
FOR I IN 1..NAME1.COUNT LOOP
RESULT := RESULT || NAME1(I)||',';
END LOOP;
RESULT := SUBSTR(RESULT,1,LENGTH(RESULT)-1);
RETURN(RESULT);
END;
/